当组件验证失败时,我尝试执行以下操作:
- 将未通过验证的输入的边框更改为绿色
- 将验证失败的输入边框更改为红色
- 在页面顶部呈现一个包含国际化标签/消息对的列表
- 仅显示错误消息
到目前为止我所拥有的:
我使用 Bean 验证:
@Size(min = 5, max = 20)
我使用 JS/JQuery 管理着色,方法如下:
- 我渲染一个带有验证状态的隐藏字段:
styleClass="hidden #{facesContext.validationFailed?'failed-validation':'success-validation'}"
- 在要验证的组件上,我设置了单独的验证状态:
#{component.valid?'input-valid-tobe':'input-error'}"
- 在我的 Ajax 操作中,我注册了
onevent="xxx"
用正确的有效 CSS 替换 CSS 的函数,即我只想在验证失败时突出显示已验证的内容:
function xxx(data){ if(data.status == "success"){ if ($('.failed-validation')[0]){ $('.input-valid-tobe').addClass('input-valid'); } } }
现在解决问题,渲染消息: 我想渲染一个显示组件标签和消息的列表。
消息:
我想我可以使用 bean 验证 I18N,如此处所述的消息:
How does it work with bean validation messages and i18n in JSF2? http://jcp.org/aboutJava/communityprocess/edr/jsr303/index.html
..但是,我希望 JSF 2.2 中可能有一些新内容!有吗?
标签:
不应该<h:messages/>
渲染输入字段的标签? (由于某种原因没有)
过滤:
有没有办法通过 severity
过滤消息?
(除了创建一个使用 CSS 来隐藏我不想显示的消息的自定义 bean)
最佳答案
您可以通过 ValidationMessages_xx_XX.properties
自定义和本地化它们文件。
例如
-
ValidationMessages.properties
- 默认语言环境(通常是美式英语,en_US
) -
ValidationMessages_es.properties
- 西类牙语 -
ValidationMessages_en_GB.properties
- 英式英语
如果在特定于区域设置的 bundle 中找不到条目,则会回退到默认 bundle 。
至于标签,默认情况下确实不添加。您可以通过属性文件中由 <message-bundle>
标识的以下条目轻松地告诉 JSF 使用 JSF 标签为 Bean 验证消息添加前缀。的faces-config.xml
:
javax.faces.validator.BeanValidator.MESSAGE = {1}: {0}
{0}
是 bean 验证器的消息,{1}
是 JSF 组件的标签。最终结果如下:
Label of component: bean validation message
如果您想要对标签的定位进行更细粒度的控制,您需要创建一个自定义 bean 验证消息插值器。 JSF utility library OmniFaces有such one .
对于过滤,<h:messages>
没有内置的方法。 。您需要自己迭代这些消息。
例如
<ui:repeat value="#{facesContext.messageList}" var="message">
<h:panelGroup rendered="#{message.severity.ordinal eq 2}">
ERROR! #{message.summary}
</h:panelGroup>
</ui:repeat>
关于使用 h :messages: How to get I18N message and label? 进行 JSF 复杂验证格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152702/