2008-11-12 7 views
0

Je suis en train de modifier une application jsf. J'ai deux haricots.JSF: Comment mettre à jour une base de bean d'une session sur un autre bean session?

  • connectionBean
  • UIBean

Quand je mets mes paramètres de connexion à connectionBean la première fois, le UIBean est capable de lire mes informations connectionBean et afficher l'arborescence interface correcte. Cependant, lorsque j'essaie de définir les paramètres de connexion dans la même session. Mon UIBean utilisera toujours les informations connectionBean précédentes.

Il utilisera uniquement après avoir invalidé l'ensemble de httpSession.

Y at-il de toute façon que je puisse mettre à jour un bean de session un autre bean session?

+0

Les beans partagent-ils les paramètres de connexion ou UIBean fait-il référence à connectionBean? – sblundy

+0

Pouvons-nous voir votre code? – branchgabriel

+0

Ceci est des codes de fournisseur je ne sais pas si je peux le partager librement avec vous tous. UIBean ont une référence à connectionBean –

Répondre

1

Cela me semble être une sorte de problème avec UIBean référençant une version obsolète de ConnectionBean. C'est un problème avec JSF - si vous recréez un bean, JSF ne mettra pas à jour les références dans tous vos autres beans.

Vous pouvez essayer d'obtenir une copie «fraîche» du ConnectionBean à chaque fois. La méthode suivante permet de récupérer un haricot par la sauvegarde nom:

protected Object getBackingBean(String name) 
{ 
    FacesContext context = FacesContext.getCurrentInstance(); 

    return context 
      .getApplication().createValueBinding(String.format("#{%s}", name)).getValue(context); 
} 

Sans connaître les détails de votre code et comment vous utilisez les haricots, il est difficile d'être plus précis!

1

@Phill Sacre getApplication(). CreateValueBinding est maintenant obsolète. Utilisez cette fonction à la place pour JSF 1.2. Pour obtenir une nouvelle copie du haricot.

protected Object getBackingBean(String name) 
{ 
    FacesContext context = FacesContext.getCurrentInstance(); 

    Application app = context.getApplication(); 

    ValueExpression expression = app.getExpressionFactory().createValueExpression(context.getELContext(), 
      String.format("#{%s}", name), Object.class); 

    return expression.getValue(context.getELContext()); 
} 
0

Définir méthode constante et statique haricots de la première session:

public class FirstBean { 

public static final String MANAGED_BEAN_NAME="firstBean"; 

/** 
* @return current managed bean instance 
*/ 
public static FirstBean getCurrentInstance() 
{ 
    FacesContext context = FacesContext.getCurrentInstance(); 
    return (FirstBean) context.getApplication().evaluateExpressionGet(context, "#{" + FirstBean.MANAGED_BEAN_NAME + "}", TreeBean.class); 
} 
... 

que l'utilisation dans le haricot deuxième session comme ceci:

... 
FirstBean firstBean = FirstBean.getCurrentInstance(); 
... 

approche mieux serait d'utiliser une injection de dépendance cadre comme JSF 2 ou Spring.

Questions connexes