我有2个不同的用户,一个用户和一个adminUser。
登录屏幕示例:
<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验证用户名和密码是否匹配并存在于数据库中,并在用户admin时返回loginPassAdmin,当用户user和loginFail时,如果用户名和密码不匹配或存在,则返回loginPass。因此,在我的登录屏幕上,我想在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;
}
谢谢/亲切的问候
答案 0 :(得分:3)
设置全局面部消息。如果您在FacesContext#addMessage()
中使用null
的客户ID,则会成为全局消息,您可以使用<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" />
在你喜欢的地方。