我无法在JSF中显示错误消息。我的要求如下:
我有一个用户表单,其中用户必须输入详细信息,如姓、名、用户名和电子邮件地址。所有这些字段都是必填的,其中用户名和电子邮件地址是唯一的。因此,当用户输入所有字段,如果他点击保存,然后在后台我必须检查用户名和电子邮件地址是否已经存在于数据库中,如果它存在,我必须在页面顶部显示错误信息,说"输入的数据已经存在,请重新输入"。
对于姓和名的验证消息应该显示在每个字段的一侧。我不能使用<h:messages>
,因为它一次显示所有的验证消息。
所以我在表单中填充一个隐藏字段,使用以下代码的消息:
context.addMessage("addUserErrorMessage", new FacesMessage("the data entered is already exists, please reenter again"));
addUserErrorMessage
是隐藏表单字段的id。
但是当我在页面顶部显示消息
时<h:message for="addUserFormMessage">
消息显示在页面底部当我检查firebug时,我发现下面的标签填充了
<ul id="javax_faces_developmentstage_messages" title="Project Stage[Development: Unhandled Messages">
<li style="color:red;">the data entered is already exists, plese reenter again </li>
</ul>
我无法找出,为什么消息显示在底部,因为我写了<h:message>
标签的页面顶部。
Thanks in advance
所以我正在使用以下代码填充表单中的隐藏字段:
context.addMessage("addUserErrorMessage", new FacesMessage("the data entered is already exists, please reenter again"));
addUserErrorMessage是隐藏表单字段的id。
addMessage()
期望客户端ID作为第一个参数,而不是组件ID。客户端ID应该看起来像formId:addUserErrorMessage
。客户端ID基本上就是HTML DOM元素ID。在浏览器中打开页面,右键单击查看源代码,找到隐藏的输入并计算其id
属性。
作为一个完全不同的(也是更常用的)替代方案,只是不要滥用隐藏输入,而是将null
设置为客户端ID:
context.addMessage(null, new FacesMessage(message));
这样消息将被设置为全局消息,并且您可以使用<h:messages>
的globalOnly
属性仅显示全局消息。
<h:messages globalOnly="true" />