我不清楚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>
但是如果我将<h:message for="loginForm"></h:message>
添加到我的代码中,输出将是:
它显示详细消息而不是摘要消息,实际上并不是什么大不了但我只是想知道为什么会发生这种情况?谁能解释一下?
答案 0 :(得分:2)
当javax.faces.PROJECT_STAGE
设置为Development
并且您忘记在视图中声明<h:messages>
时,该橙色消息将仅。在这种情况下,JSF无法在页面中的任何位置显示消息。通常,这只会在服务器日志中记录为警告,如下所示:
但是,为了方便开发人员,当项目阶段设置为开发时,这也会附加到网页的末尾。但是你不应该依赖它作为webapp的正常功能。你应该把它作为一个暗示,你忽略了某些东西或做错了什么。正确的解决方案是添加适当的<h:message for="xxx">
或至少<h:messages>
作为后备。
开发阶段消息显示摘要而不是详细信息是您最不关心的问题。它首先应该没有显示出来。