Comment faire pour démarrer spécial de l'événement init dans un backing bean avant JSF chargement de la page?
PF 3.5.10, Mojarra 2.1.21, Omnifaces 1.5
Comment appeler spécial init()-méthode de certains (CDI)SessionScoped bean avant que je charge un .xhtml JSF page ? Maintenant, je init() si l'utilisateur sélectionnez la page de menu du site (avec p:menutitem
). Mais que faire si l'utilisateur l'utilisation de ligne d'adresse du navigateur de type url directement?
Edit: my.xhtml
:
<ui:define template="/mytemp.xhtml">
<f:event type="preRenderView" listener="#{mybean.init()}" />
<h:form>
<p:commandButton update="@form" ... />
</h:form>
</ui:define>
Si je le fais de cette façon, la fonction init() est appelée à chaque mise à jour (c'est à dire sur chaque publication d'un serveur),dans l'exemple sur chaque clic de bouton de commande. Donc je ne peux pas utiliser votre proposition.
Edit 2: Merci Luiggi Mendoza, et BalusC!
En plus de la solution de Luiggi Mendoza, comme dans les commentaires, a déclaré le Omnifaces 1.6 sera ViewScope aussi.
OriginalL'auteur Tony | 2013-08-28
Vous devez vous connecter pour publier un commentaire.
Le problème est que le
@PostConstruct public void init()
méthode est appelée après que le managed bean est créé et que les champs sont injectés. Depuis votre bean est@SessionScoped
, il va vivre jusqu'à ce que l'utilisateur de la session expire.Un moyen de le résoudre est d'utiliser
<f:event type="preRenderView" listener="{bean.init}" />
comme expliqué ici: Que peut - <f:métadonnées>, <f:viewParam> et <f:viewAction>? (pas besoin d'utiliser<f:metadata>
comme l'a expliqué BalusC ici: Importe-t-il si f lieu:événement à l'intérieur de f:les métadonnées ou pas?).Par votre question de mise à jour, ce problème est traité dans le premier lien. Je vais poster le code afin de gérer cette situation (prise de BalusC réponse):
Si vous migrez vers JSF 2.2, puis il y a un
@ViewScoped
annotation pour le CDI haricots et vous pourrait réduire la portée de votre@SessionScoped
haricots en conséquence.<f:event>
n'a pas nécessairement besoin d'aller à l'intérieur<f:metadata>
Par la voie, OmniFaces 1.6 viendra avec un CDI compatible
@ViewScoped
JSF 2.0/2.1.votre dernier commet est une excellente nouvelle. Je vais attendre et essayer.
J'ai mis à jour ma question.
OriginalL'auteur Luiggi Mendoza