验证消息显示在页面底部JSF - javax面向developmentstage消息

时间:2011-07-20 20:22:08

标签: jsf

我坚持在JSF中显示错误消息。我的要求如下:

我有一个用户表单,用户必须输入首字母,姓氏,用户名和电子邮件地址等详细信息。所有这些字段都是必填字段,在这些字段中,用户名和电子邮件地址是唯一的。因此,当用户输入所有字段时,如果他点击保存,那么在后端我必须检查数据库中是否已存在用户名和电子邮件地址,如果存在,我必须在页面顶部显示错误消息“输入的数据已经存在,请重新输入“。

firstname和lastname的验证消息应显示在每个字段的旁边。我无法使用<h:messages>,因为它会一次显示所有验证消息。

所以我使用以下代码填充表单中的隐藏字段:

context.addMessage("addUserErrorMessage", new FacesMessage("the data entered is already exists, please reenter again"));

addUserErrorMessage是隐藏表单字段的ID。

但是当我在页面顶部显示消息

<h:message for="addUserFormMessage">

消息显示在页面底部 当我通过萤火虫检查时,我发现以下标签正在填充

<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>标记。

任何人都可以帮我吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

  

所以我使用以下代码填充表单中的隐藏字段:

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));

这样,邮件将被设置为全局邮件,您可以使用globalOnly的{​​{1}}属性仅显示全局邮件

<h:messages>