Définit la valeur pendant la phase de mise à jour des valeurs du modèle uniquement (car elle s'étend UIInput
).
La valeur définie n'est pas disponible pendant @PostConstruct
, vous avez donc besoin d'un <f:event type="preRenderView" listener="#{bean.init}" />
élément supplémentaire à l'intérieur du <f:metadata>
pour effectuer l'initialisation / le préchargement en fonction des valeurs définies. Depuis JSF 2.2, vous pouvez utiliser <f:viewAction>
pour cela à la place.
Permet une conversion / validation imbriquée <f:converter>
et <f:validator>
plus fine. Même un <h:message>
peut être attaché.
Peut être inclus en tant que chaîne de requête GET à l'aide de l' includeViewParams
attribut <h:link>
ou du includeViewParams=true
paramètre de requête dans n'importe quelle URL.
Peut être utilisé sur un @RequestScoped
bean, mais il nécessite que le bean soit @ViewScoped
si vous voulez que les paramètres de vue survivent aux échecs de validation causés par les formulaires inclus dans la vue, sinon vous devez conserver manuellement tous les paramètres de demande pour les demandes suivantes <f:param>
dans la commande Composants.
Exemple :
<f:metadata>
<f:viewParam id="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:message for="user_id" />
avec
private User user;
et un @FacesConverter("userConverter")
. L'appel de la page par http://example.com/context/user.xhtml?id=123 passera le id
paramètre via le convertisseur et définira l' User
objet comme propriété de bean.
Définit la valeur immédiatement après la construction du bean.
La valeur définie est disponible pendant @PostConstruct
laquelle permet une initialisation / préchargement facile d'autres propriétés en fonction de la valeur définie.
Ne permet pas la conversion / validation déclarative en vue.
La propriété gérée de #{param}
n'est pas autorisée sur les beans avec une portée plus large que la portée de la requête, le bean doit donc être @RequestScoped
.
Si vous comptez sur la #{param}
présence d'une propriété gérée dans les requêtes POST suivantes, vous devez l'inclure comme <f:param>
dans les UICommand
composants.
Exemple :
@ManagedProperty("#{param.id}")
private Long id;
private User user;
@EJB
private UserService userService;
@PostConstruct
public void init() {
user = userService.find(id);
}
Mais vous devez gérer vous-même la validation chaque fois que user
c'est null
en tripotant FacesContext#addMessage()
ou quelque chose.
Vous pouvez les utiliser à la fois lorsque les deux @PostConstruct
et includeViewParams
sont obligatoires. Vous ne pourrez plus appliquer de conversion / validation fine.
Voir également:
@ManagedProperty
impossible un paramètre de requête.<f:event type="preRenderView">
ou le prochain JSF 2.2<f:viewAction>
.2 autres différences:
@ManagedProperty
est utilisable uniquement avec des beans gérés par JSF, pas avec des beans gérés par CDI (@Named
);<f:viewParam>
fonctionne uniquement avec les paramètres des requêtes GET.la source