Bon moyen de récupérer une autre instance de haricot à partir du contexte
-
13-10-2019 - |
Question
Nous utilisons le code suivant pour obtenir l'instance gérée de haricots dans le contexte.
FacesUtils.getManagedBean("beanName");
Est-ce la bonne façon de le faire ?. Si plusieurs utilisateurs accèdent à la même haricot ce qui se passera? Comment les instances de haricots sont gérés?
La solution
Depuis FacesUtils
ne fait pas partie de la mise en œuvre standard JSF, on ne sait pas ce qu'il est en train de faire sous les couvertures.
Peu importe, quand vous êtes déjà dans un bean géré, le meilleur moyen est d'injecter l'autre haricot comme propriété gérée. Je suppose que vous êtes déjà sur JSF 2.0, voici un exemple JSF 2.0 ciblé.
@ManagedBean
@SessionScoped
public void OtherBean {}
@ManagedBean
@RequestScoped
public void YourBean {
@ManagedProperty("#{otherBean}")
private void OtherBean;
@PostConstruct
public void init() {
otherBean.doSomething(); // OtherBean is now available in any method.
}
public void setOtherBean(OtherBean otherBean) {
this.otherBean = otherBean;
}
// Getter is not necessary.
}
Mais quand vous êtes toujours sur 1.x JSF, alors vous devez le faire par l'entrée de <managed-property>
dans faces-config.xml
comme expliqué dans cette question: Echanger des données entre les haricots gérés .
Si vous arrive d'utiliser CDI @Named
au lieu de JSF @ManagedBean
, l'utilisation @Inject
au lieu de @ManagedProperty
. Pour cela, une méthode setter est pas nécessaire.
Voir aussi:
- Communication dans JSF2
- Get JSF bean géré par nom toute catégorie connexe Servlet
- grains de support (@ManagedBean) ou haricots CDI (@Named)?
En ce qui concerne votre préoccupation
Si plusieurs utilisateurs accèdent à la même haricot ce qui se passera? Comment les instances de haricots sont gérés?
Ils sont gérés par JSF. Si un haricot est trouvée, JSF va juste revenir exactement ce haricot. Si aucun haricot est trouvé, JSF juste automatiquement créer un et mettre dans le champ d'application associée. JSF ne va pas créer inutilement plusieurs haricots.