2010-11-29 67 views
0

我有一个页面加载(在panelGroup)两个不同的页面,由于登录状态(记录,没有记录)。这是主开关:JSF - 问题与@ViewScope

template.xhtml P.S. selector.page的 “主页” 为默认

<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> 

简介选择器是@ViewScope的作用域。当我加载页面和im记录时,它初始化ProfileSelector bean。否则,如果我没有登录,我做登录,它将内容从主页更改为配置文件,但Bean没有启动。那么,当我没有登录时,如何初始化这个bean?

我认为上面的代码足以理解问题。

干杯

回答

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

的问题是,您使用的突破@ViewScope使用替代JSTL元素。

+0

那么,如何解决这一问题?删除捕获? – markzzz 2010-11-29 17:42:56