我坚持在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">
消息显示在页面底部 当我通过萤火虫检查时,我发现以下标签正在填充 p>
<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>
标记。
任何人都可以帮我吗?
提前致谢
答案 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>