java - 对 Facelets 页面中的某些元素使用相同的消息

标签 java jsf facelets custom-errors

现在我正在使用 JSF 2.0 和 Facelets 创建一些网页。我有一个登录页面,其中除了登录面板之外还包含其他内容。

事情是我想在面板顶部的面板的 2 个输入字段(用户名和密码)中显示相同的消息,但两者只显示 1 条消息。当我使用<h:messages>时代码显示正确,但也与其他组件的所有其他消息一起显示。因为<h:messages>对于整个 Facelet 来说是全局的。

我尝试使用两个 <h:message for="">并为两个输入字段添加相同的消息,但该消息会显示两次。

消息将是“用户名和/或密码不正确”。

如果其中任何一个不正确,我该如何显示消息?

最佳答案

如果您通过 FacesContext.addMessage(..) API 在支持 bean 中手动添加这些消息,为什么不能仅为用户名字段或整个登录面板添加这些消息?

如果您为此使用自定义 validator ,则可以利用 UIInput.isValid() 方法并尝试以下操作:

<h:message for="password" rendered="#{username.valid}"/>
<h:message for="username"/>
<h:inputText id="username" binding="#{username}"/>
<h:inputText id="password" binding="#{password}"/>

甚至

<h:outputText value="msg['genericErrorMessage']" rendered="#{!username.valid || !password.valid}"/>

另一方面,尚不清楚为什么必须对用户名和密码字段应用相同的验证两次。

关于java - 对 Facelets 页面中的某些元素使用相同的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10251567/

相关文章:

java - 数组项至少等于另一个数组中的一项

JSF <h :outputFormat>: use array values as parameters

jsf - 在 cc 外部声明标记 :implementation and let the cc:implementation include it

java - 我的重绘函数没有调用我的paintComponent

java - 在搜索中查找 HashMap 中的字符串

java - 引用正则表达式中以前匹配的组

java - 如何在index.xhtml中调用doFilter()

java - 下载后如何刷新页面

jsf - LocalDate(仅限)与 primefaces 日历

java - 在 Facelets 页面中显示异常堆栈跟踪