JSF FacesMessage显示详细消息而不是摘要消息

时间:2017-07-15 14:22:15

标签: jsf-2

我不清楚addMessage()FacesMessage的工作原理。如果我没有指定<h:message>来显示消息,则会显示摘要消息。但是如果我为它创建一个<h:message>字段,将显示详细消息。为什么?如何选择要显示的消息?以下是我的代码:

public String login()
{
    if(password.equals("123123"))
    {
        session.setAttribute("username", username);
        return "home";
    }
    else
    {
        FacesContext.getCurrentInstance().addMessage("loginForm", new FacesMessage(FacesMessage.SEVERITY_WARN,"Incorrect Username and Passowrd", "Please enter correct username and Password"));
        return "login";
    }
}

JSF

<h:form id="loginForm">
    <h:outputLabel for="username" value="Username: " />
    <h:inputText id="username" value="#{loginBean.username}" required="true" requiredMessage="Username is required" />
    <h:message for="username"></h:message>
    <br /><br />

    <h:outputLabel for="password" value="Password: " />
    <h:inputSecret id="password" value="#{loginBean.password}"></h:inputSecret>
    <h:message for="password"></h:message>
    <br /><br />

    <h:commandButton action="#{loginBean.login()}" value="Login"></h:commandButton>
    <br /><br />
</h:form>

上面的代码将产生以下输出:
enter image description here

但是如果我将<h:message for="loginForm"></h:message>添加到我的代码中,输出将是: enter image description here

它显示详细消息而不是摘要消息,实际上并不是什么大不了但我只是想知道为什么会发生这种情况?谁能解释一下?

1 个答案:

答案 0 :(得分:2)

javax.faces.PROJECT_STAGE设置为Development并且您忘记在视图中声明<h:messages>时,该橙色消息将。在这种情况下,JSF无法在页面中的任何位置显示消息。通常,这只会在服务器日志中记录为警告,如下所示:

  

There are some unhandled FacesMessages, this means not every FacesMessage had a chance to be rendered

但是,为了方便开发人员,当项目阶段设置为开发时,这也会附加到网页的末尾。但是你不应该依赖它作为webapp的正常功能。你应该把它作为一个暗示,你忽略了某些东西或做错了什么。正确的解决方案是添加适当的<h:message for="xxx">或至少<h:messages>作为后备。

开发阶段消息显示摘要而不是详细信息是您最不关心的问题。它首先应该没有显示出来。

另见: