JSF:检查<h:message for ="id"/>是否存在的更好方法

use*_*809 20 jsf jsf-2

我有一个表单,其中需要在输入元素下方显示验证错误消息.需要通过在错误消息和输入文本周围显示错误气泡来突出显示错误.

为此,我需要检查单个元素的h:消息是否存在.我能够检查是否存在全局错误消息,如下所示

<h:panelGroup rendered="#{not empty facesContext.messages}"> 
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

我如何检查相同的特定客户端ID(比如名字).所以像

faceContent.messages("creditCardNo")
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是创建一个自定义解析器,但想知道是否有更好的解决方案.

Bal*_*usC 21

需要通过在错误消息周围显示错误气泡来突出显示错误...

只需使用<h:message>一个样式,你可以定义所需的样式.

<h:inputText id="foo" />
<h:message for="foo" styleClass="error" />
Run Code Online (Sandbox Code Playgroud)

.error {
    border: 1px solid red;
    background: pink;
}
Run Code Online (Sandbox Code Playgroud)

...和输入文本.

只是检查是否UIInput#isValid()true.从JSF 2.0开始,当前组件可通过隐式EL变量获得#{component}.

<h:inputText styleClass="#{!component.valid ? 'error' : 'none'}" />
Run Code Online (Sandbox Code Playgroud)

至于关于检查某个客户端ID是否有消息的实际问题,那么您可能会发现这个答案很有趣.但我不认为这适用于您的特定情况.


更新:根据评论,您似乎想要设置包含组件的样式而不是invididual组件.在这种情况下,请执行以下操作:

<h:panelGroup styleClass="#{!foo.valid ? 'error' : 'none'}">
    <h:inputText id="foo" binding="#{foo}" />
    <h:message for="foo" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)