Was kann <f:metadata>, <f:viewParam> und <f:viewAction> eingesetzt werden?
Kann jemand klären, wie wir im Allgemeinen, oder im real-world Beispiel, dieses snippet?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
InformationsquelleAutor Hanynowsky | 2011-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prozess GET-Parameter
Den
<f:viewParam>
verwaltet die Einstellung, Konvertierung und Validierung der GET-Parameter. Es ist wie die<h:inputText>
, aber dann für GET-Parameter.Folgenden Beispiel
macht im Grunde Folgendes:
id
.required
,validator
undconverter
Attribute und nest ein<f:converter>
und<f:validator>
im es wie als mit<h:inputText>
)#{bean.id}
Wert, oder wenn dievalue
Attribut nicht vorhanden ist, dann legen Sie es als Anfrage attribtue auf Namenid
so, dass es verfügbar ist von#{id}
im Blick.Also, wenn Sie öffnen Sie die Seite als
foo.xhtml?id=10
dann der Wert des Parameters10
get set in der bean-dieser Weg, direkt vor die Ansicht gerendert wird.Als in der Validierung, im folgenden Beispiel wird der Parameter zu
required="true"
und erlaubt nur Werte zwischen 10 und 20. Jeder fehlgeschlagene Prüfung wird das Ergebnis in einer Meldung angezeigt werden.Durchführung von business-Maßnahmen auf die GET-Parameter
Können Sie die
<f:viewAction>
.mit
Den
<f:viewAction>
ist aber neu seit JSF 2.2 (die<f:viewParam>
existiert bereits seit JSF 2.0). Wenn Sie nicht aktualisieren Sie, dann Ihre beste Wette ist, mit<f:Veranstaltung>
statt.Dies ist jedoch aufgerufen, auf jeder Anfrage. Sie brauchen, um explizit zu überprüfen, wenn die Anforderung nicht ein postback:
Wenn Sie möchten, zu überspringen "Konvertierung/Validierung fehlgeschlagen" - Fälle als gut, dann gehen Sie wie folgt vor:
Mit
<f:event>
diese Weise ist im wesentlichen ein workaround/hack, das ist genau der Grund, warum die<f:viewAction>
wurde in JSF 2.2.Pass-view-Parameter zur nächsten Ansicht
Können Sie "pass-through" - die view-Parameter in der navigation links durch Einstellung
includeViewParams
Attributtrue
oder durch hinzufügenincludeViewParams=true
request-parameter.erzeugt, die mit den oben genannten
<f:metadata>
Beispiel grundsätzlich den folgenden linkmit den original-parameter-Wert.
Dieser Ansatz nur erfordert, dass
next.xhtml
hat auch eine<f:viewParam>
auf die gleichen parameter, die es sonst nicht Durchlaufen werden.Verwenden Sie GET-Formulare in JSF
Den
<f:viewParam>
können auch verwendet werden, in Kombination mit "plain HTML" GET-Formularen.Im Grunde mit dieser
@RequestScoped
bean:Beachten Sie, dass die
<h:message>
ist für die<f:viewParam>
, nicht die reinen HTML -<input type="text">
! Beachten Sie auch, dass der input-Wert zeigt#{param.query}
wenn#{bean.query}
leer ist, weil die eingereichten Wert sonst nicht zeigen, bis auf alle, wenn es eine Validierungs-oder Konvertierungsfehler. Bitte beachten Sie, dass dieses Konstrukt ist ungültig für JSF-Komponenten-Eingang (das ist, was "unter der Haube" schon).Siehe auch:
Eine Umleitung erstellt einen neuen GET-request. Die bean-scope der Quell-und Ziel-bean, ist irrelevant. Sie sollten jedoch die möglichen Implikationen eines neuen GET-Anfrage in eine Anfrage-und Sicht-scoped bean. Siehe auch stackoverflow.com/questions/7031885/...
Was genau meinen Sie mit "Sie sollten jedoch die möglichen Implikationen eines neuen GET-Anfrage in eine Anfrage-und Sicht-scoped bean".
Sie wird zerstört und neu erstellt werden, weil Ihr Umfang wird dann Ende und Anfang.
Eine umfassende Antwort. "Wenn Sie müssen, verwenden Sie ein @PostConstruct gefällt mir" - Funktion für den view-scoped beans, die nicht aufgerufen wird, auf jede Anfrage, prüfen, ob die Anfrage ist nicht ein postback". Wenn es nicht aufgerufen wird, auf jede Anfrage, warum dann zu überprüfen, ob die Anforderung zu einem postback oder nicht?
InformationsquelleAutor BalusC