2013-09-26 78 views
1

我有2個不同的用戶,一個用戶和一個adminUser。JSF從bean返回消息給頁面

登錄屏幕例如:

<h:panelGroup id="messagePanel" layout="block"> 
        <rich:notifyMessages stayTime="2000" nonblocking="true"/> 
       </h:panelGroup> 
       <h:inputText id="username" value="#{LoginManager.userName}" title="#{bundle.CreateEmployeesTitle_employeeNo}" required="true" requiredMessage="#{bundle.LoginUsernameRequired}" pt:placeholder="Username"/> 

       <h:inputText id="password" value="#{LoginManager.password}" title="#{bundle.CreateEmployeesTitle_employeeNo}" required="true" requiredMessage="#{bundle.LoginPasswordRequired}" pt:placeholder="Password"/> 

       <h:commandLink action="#{LoginManager.loginAction}" value="#{bundle.LoginTabTitle}" styleClass="linkbutton" /> 

我loginManager驗證該用戶名和密碼匹配,並且存在於數據庫中,並返回loginPassAdmin當用戶管理,loginPass當用戶的用戶和loginFail時的用戶名和密碼不匹配或存在。所以在我的登錄屏幕上,我想在loginAction返回loginFail時顯示通知,如果可能的話可能在同一頁面上?

一塊loginManager的:

if (userStatus != null) { 
      if (userStatus.equalsIgnoreCase("adminUser")) { 
       action = "loginPassAdmin"; 
       FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("username", userName); 
      } else if (userStatus.equalsIgnoreCase("nonAdmin")) { 
       action = "loginPass"; 
       FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("username", userName); 
      } else { 
       action = "loginFail"; 
      } 
     } else { 
      action = "loginFail"; 
     } 
     return action; 
    } 

謝謝/親切的問候

回答

3

設置一個全局的面孔消息。如果您在FacesContext#addMessage()中使用的客戶端ID爲null,則它會成爲全局消息,您可以使用<h:messages globalOnly="true">進行過濾。

E.g.

FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(action)); // Substitute "action" with real message. 
return null; // <-- Returns to the same view. You can also just declare method void. 

<h:messages globalOnly="true" /> 

這裏你喜歡它的地方。

+1

測試和工作完美。謝謝 – user1794974

+1

不客氣。 – BalusC