JSF Backing Bean constructeur appelé plusieurs fois

Je vais essayer de JSF 2.0 (après l'utilisation de ICEfaces 1.8 depuis quelques mois) et je suis à essayer de comprendre pourquoi en JSF 2.0 mon backing bean constructeur est appelé à de multiples reprises.

Le haricot est censé être instancié à la fois lors de la création, mais le "Haricot Initialisé" texte s'affiche à chaque fois que je clique sur le bouton de commande, indiquant une nouvelle Bean objet instansiated.

La facelet page:

    <?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

    <h:body>
        <div id="content">
            <h:form id="form">
                <h:commandButton value="Toggle" action="#{bean.toggleShowMe}"/>
            </h:form>


            <h:panelGrid rendered="#{bean.showMe}">
                <h:outputText value="Show me!"/>
            </h:panelGrid>
        </div>
    </h:body>
</html>

Le backing bean:

@ManagedBean
@RequestScoped
public class Bean {
    private boolean showMe = false;

    public boolean isShowMe() {
        return showMe;
    }

    public void setShowMe(boolean showMe) {
        this.showMe = showMe;
    }

    public void toggleShowMe(){
        System.out.println(showMe);
        if(showMe==true){
            showMe=false;
        }else{
            showMe=true;
        }
    }
    /** Creates a new instance of Bean */
    public Bean() {
        System.out.println("Bean Initialized");
    }

}

C'est tout ce qu'il est. Qu'un simple test. Le même comportement se montre si j'utilise ICEfaces 2.0 et à la place de la panelGrid j'utilise:

<ice:panelPopup visible="#{bean.showMe}">

Je vous remercie de toute l'aide ici. Je suis à une perte pour l'expliquer.

Mise à jour: En réponse à l'Aba Dov, I @SessionScoped le haricot, pensant qu'il ne serait pas appeler le constructeur lors de chaque demande et a couru dans le même comportement. Ce qui me manque?

Si le composant EST en session d'étendue, il ne sera pas créé plus d'une fois par session - depuis ce beahviour est largement utilisé, le bug est probablement dans votre code, pas JSF, êtes-vous à l'aide de @SessionScoped à partir de la droite package? (il y en a deux dans EE6).
fdreger-je suis en utilisant javax.des visages.haricot.SessionScoped. Dois-je utiliser javax.de l'entreprise.contexte.SessionScoped?

OriginalL'auteur TheDream34 | 2011-01-28