2010-11-29 35 views
0

J'ai une page qui charge (dans un panelGroup) deux pages différentes, en raison de l'état de connexion (enregistré, pas enregistré). C'est l'interrupteur principal:JSF - Problème avec @ViewScope

template.xhtml P.S. selector.page est "page d'accueil" par défaut

<h:panelGroup layout="block" styleClass="contenitore"> 
    <h:panelGroup layout="block"> 
     <h:panelGroup layout="block" styleClass="menu_table" id="login"> 
      <ui:insert name="login_homepage" /> 
     </h:panelGroup> 

     <h:panelGroup layout="block" id="content"> 
      <c:catch> 
       <ui:include src="/#{selector.page}/#{selector.page}.xhtml" /> 
      </c:catch> 
     </h:panelGroup> 
    </h:panelGroup> 
</h:panelGroup>   

homepage.xhtml

<h:panelGroup rendered="#{!user.loggedIn}"> 
    <h:panelGroup layout="block" styleClass="content_title"> 
     Homepage 
    </h:panelGroup> 
</h:panelGroup> 
<h:panelGroup rendered="#{user.loggedIn}"> 
    <ui:include src="/profile/profile.xhtml" /> 
</h:panelGroup> 

login

<ui:define name="login_homepage"> 
    <h:form id="formLogin" prependId="false"> 
     <h:inputHidden value="#{selector.page}" id="page" /> 

     <h:panelGroup rendered="#{!user.loggedIn}"> 
      <h:outputScript name="jsf.js" library="javax.faces" target="head" /> 

      <h:outputLabel styleClass="menu_span" value="Username" /> 
      <h:inputText value="#{user.nickname}" id="nickname" /> 
      <h:outputLabel styleClass="menu_span" value="Password" /> 
      <h:inputSecret value="#{user.password}" id="password" /> 

      <h:outputLabel styleClass="menu_span"> 
       <h:commandButton value="Login" action="#{user.checkLogin}"> 
        <f:ajax event="action" execute="nickname password page" render=":login :content err"/> 
       </h:commandButton> 
      </h:outputLabel> 
     </h:panelGroup> 

     <h:panelGroup rendered="#{user.loggedIn}"> 
      <h:outputLabel styleClass="menu_title" value="LOGGED" /> 
     </h:panelGroup> 
    </h:form> 
</ui:define> 

profile.xhtml

<h:panelGroup layout="block" id="profileContent"> 
    <h:form id="formProfile"> 
     <h:outputScript name="jsf.js" library="javax.faces" target="head" /> 

     <h:panelGroup rendered="#{profileSelector.profilePage=='main'}"> 
      <ui:include src="/profile/profile_main.xhtml" /> 
     </h:panelGroup> 

     <h:panelGroup rendered="#{profileSelector.profilePage=='edit' || profileSelector.profilePage=='editConfirm'}"> 
      <ui:include src="/profile/profile_edit.xhtml" /> 
     </h:panelGroup> 
    </h:form> 
</h:panelGroup> 

Profil Le sélecteur est @ScopeScope. Lorsque je charge la page et que je me connecte, il initialise le bean ProfileSelector. Sinon, si je ne suis pas connecté et que je fais le login, il change le contenu de la page d'accueil en profil, mais le Bean n'est pas initialisé. Alors, comment puis-je initialiser ce haricot quand je ne suis pas connecté? Je pense que le code ci-dessus est suffisant pour comprendre le problème.

Vive

Répondre

0
<c:catch> 
       <ui:include src="/#{selector.page}/#{selector.page}.xhtml" /> 
      </c:catch> 

Le problème est que vous utilisez des éléments JSTL qui cassent @ViewScope alternatives d'utilisation.

+0

Alors, comment puis-je résoudre ce problème? Enlever les captures? – markzzz

+0

Oui. Cela ne fonctionne pas avec JSF2 ViewScope – Dejell

+0

Le problème est que si l'utilisateur ajoute une autre "page" pourrait être un problème. J'ai besoin d'ajouter une sorte de page de validation ... – markzzz