JSF从bean返回页面消息

时间:2013-09-26 11:42:30

标签: jsf

我有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;
    }

谢谢/亲切的问候

1 个答案:

答案 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" />

在你喜欢的地方。