JSF Managed Bean auto-créer?
Est-il possible d'avoir un managed bean JSF être créé automatiquement?
Par exemple, j'ai plusieurs session de l'étendue des haricots. Parfois, il devient nécessaire pour accéder à ces instances dans le code (plutôt qu'en JSF), c'est fait par:
PageBean pageBean = (PageBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("pages");
Toutefois, si aucune page a déjà été visitée, qui appelle à " #{pages}' cela résout à null ... est-il de toute façon à obtenir JSF pour créer un bean quand le champ 'commence'? Dans ce cas, idéalement lors de la session d'un utilisateur commence les "pages" bean serait instancié dans la session immédiatement?
source d'informationauteur rat
Vous devez vous connecter pour publier un commentaire.
Utilisation
#evaluateExpressionGet()
à la place. Il permettra de créer des haricots lorsqu'il n'est pas encore fait.Où
"bean"
est le managed bean nom etBean.class
est la sauvegarde de haricot classe.Vous pouvez si nécessaire de conclure à une méthode d'assistance ainsi que le casting est inutile (le JSF garçons ne prennent pas avantage des médicaments génériques et de la
Class
paramètre dansevaluateExpressionGet
):qui peut être utilisé comme:
Ou sans le type, mais avec un
@SuppressWarnings
:qui peut être utilisé comme:
Mise à jour: le ci-dessus est par la voie JSF 1.2 spécifiques. Voici le chemin pour JSF 1.1 ou plus, à l'aide de la obsolète
#createValueBinding()
:Quoi au sujet de cette solution:
Par cette façon, vous pouvez même éviter l'Bean.class le paramètre.
Un mécanisme consiste à injecter de la fève dans la fève que vous souhaitez consulter dans un autre bean, comme l'a démontré avec
expensiveBean
ici:Ce n'est pas très "paresseux", mais il peut être pratique.
Question: le fait d'utiliser des
provoquer un nouveau Bean être instancié à chaque fois que le code s'exécute par le biais de ces déclarations? Ou tout simplement se référer à la même instance initialement créé?