在 JSF 中使用 bean 验证进行本地化
Posted
技术标签:
【中文标题】在 JSF 中使用 bean 验证进行本地化【英文标题】:Localization with bean validation in JSF 【发布时间】:2012-06-10 13:27:15 【问题描述】:我使用 JSF 2.0 和 RichFaces 4 创建了一个基于 MVC 的网站。每个输入文本验证都是使用 bean 验证注释完成的。我正在使用 Hibernate Validator 作为 bean 验证实现。
如何显示本地化消息?
如果我使用
@NotNull(message="<h:outputText value=\"#msg['Mymessage']\" />")
然后它将<h:outputText value="#msg['Mymessage']" />
显示为消息。
这是怎么引起的,我该如何解决?
【问题讨论】:
【参考方案1】:对于那些和我有同样问题的人(@BalusC 给出的解决方案不适用于多种语言的许多不同属性文件),要做的事情是按以下模式命名所有属性文件: ValidationMessages_xx.properties
我不知道为什么,但是 ...xx_XX... 模式对我不起作用。
【讨论】:
模式xx_XX
用于特定于区域的语言环境,例如英式英语是en_UK
,而en
仅代表英语。您应该始终使用通用变体来回退,然后它就会起作用。【参考方案2】:
您应该也不能在消息中放置 JSF 标记。此外,JSF 自己的资源包不会用于解析本地化验证消息。 JSR303 bean 验证是一个与 JSF 无关的完全独立的 API。
要国际化 JSR303 bean 验证消息,您需要在类路径根目录中创建一个单独的 ValidationMessages.properties
文件,该文件可以通过 ValidationMessages_xx_XX.properties
文件进行本地化。
例如
ERVNomView=Your message here
然后使用key
语法指定。
@NotEmpty(message="ERVNomView")
另见:
Chapter 4.3.1.1 of the JSR303 specification【讨论】:
以上是关于在 JSF 中使用 bean 验证进行本地化的主要内容,如果未能解决你的问题,请参考以下文章
如何对 jsf 复合组件中的集合属性进行 bean 验证,约束不会触发
CAS 身份验证后在 JSF 托管 Bean 中获取 LDAP 属性