Legt den Wert nur während der Phase der Aktualisierung der Modellwerte fest (da er erweitert wird UIInput).
Der eingestellte Wert ist während nicht verfügbar @PostConstruct, daher benötigen Sie einen zusätzlichen Wert <f:event type="preRenderView" listener="#{bean.init}" />innerhalb der, <f:metadata>um die Initialisierung / Vorladung basierend auf den eingestellten Werten durchzuführen. Seit JSF 2.2 können Sie <f:viewAction>stattdessen dafür verwenden.
Kann als GET-Abfragezeichenfolge mit dem includeViewParamsAttribut <h:link>oder dem includeViewParams=trueAnforderungsparameter in einer beliebigen URL eingefügt werden.
Kann für eine @RequestScopedBean verwendet werden, erfordert jedoch die Bean, @ViewScopedwenn die Ansichtsparameter alle Validierungsfehler überleben sollen, die durch in der Ansicht enthaltene Formulare verursacht werden. Andernfalls müssen Sie alle Anforderungsparameter für die nachfolgenden Anforderungen von <f:param>im Befehl manuell beibehalten Komponenten.
Beispiel :
<f:metadata><f:viewParamid="user_id"name="id"value="#{bean.user}"required="true"requiredMessage="Invalid page access. Please use a link from within the system."converter="userConverter"converterMessage="Unknown user ID."/></f:metadata><h:messagefor="user_id"/>
Legt den Wert unmittelbar nach der Konstruktion der Bohne fest.
Der eingestellte Wert ist verfügbar, während @PostConstructdessen andere Eigenschaften basierend auf dem eingestellten Wert einfach initialisiert / vorgeladen werden können.
Ermöglicht keine deklarative Konvertierung / Validierung im Blick.
Die verwaltete Eigenschaft von #{param}ist für Beans mit einem breiteren Bereich als dem Anforderungsbereich nicht zulässig, daher muss dies der Bean sein @RequestScoped.
Wenn Sie sich darauf verlassen, dass eine verwaltete Eigenschaft #{param}in den nachfolgenden POST-Anforderungen vorhanden ist, müssen Sie sie wie <f:param>in den UICommandKomponenten einschließen .
Beispiel :
@ManagedProperty("#{param.id}")privateLong id;privateUser user;@EJBprivateUserService userService;@PostConstructpublicvoid init(){
user = userService.find(id);}
Aber Sie müssen die Validierung selbst verwalten, wann immer Sie userdamit nullherumspielen FacesContext#addMessage()oder so.
Sie können beide verwenden, wenn beide @PostConstructund includeViewParamsobligatorisch sind. Sie können nur noch keine feinkörnige Konvertierung / Validierung mehr anwenden.
In Ausnahmefällen gibt es eine andere Alternative zum Abrufen von Anforderungsparametern: FacesContext.getCurrentInstance (). GetExternalContext (). GetRequestParameterMap (). Get ("parametername");
Angelcervera
1
@angel: Nur wenn die Bean einen breiteren Bereich als den Anforderungsbereich hat, was @ManagedPropertyeinen Anforderungsparameter unmöglich macht.
BalusC
hi @BalusC Ich verlasse mich auf den Wert der ID, die aus param.id mit verwalteter Eigenschaft in einem zweiten Beitrag abgerufen wurde. Wie kann ich es mit f: param einbinden?
Vielen
1
@thufir: Es wird während der Phase der Aktualisierung der Modellwerte festgelegt. Das Postkonstrukt läuft weit davor, direkt nach der Konstruktion und der Abhängigkeitsinjektion von Bean. Es ist in der Listener-Methode verfügbar, die von <f:event type="preRenderView">oder in der kommenden JSF 2.2 aufgerufen wird <f:viewAction>.
@ManagedProperty
einen Anforderungsparameter unmöglich macht.<f:event type="preRenderView">
oder in der kommenden JSF 2.2 aufgerufen wird<f:viewAction>
.2 weitere Unterschiede:
@ManagedProperty
kann nur mit von JSF verwalteten Beans verwendet werden, nicht mit von CDI (@Named
) verwalteten Beans ;<f:viewParam>
funktioniert nur mit Parametern von GET-Anforderungen.quelle