【问题标题】:JSR303 i18n not working in Primefaces based pageJSR303 i18n 在基于 Primefaces 的页面中不起作用
【发布时间】:2017-03-05 19:42:56
【问题描述】:

我正在尝试自定义(包括 i18n)JSR303,但我总是得到

### Message 'msg.test.validation' not found ###

我创建了一个包含内容的 ValidationMessages.properties 文件

msg.test.validation=This is a test

文件(包括 ValidationMessages_de.properties、_de_DE.properties 和 _en.properties)放在 src/main/resources 中。在 war 文件中,文件位于 WEB-INF/classes(标准 maven 行为)

在我的托管 bean 中

@NotNull    
@Pattern (regexp="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$", message = "{msg.test.validation}")
private String test;

并且基于 Primefaces 6.0 的页面包含

<h:form>
  <p:inputText id="test" value="#{validationView.test}" label="Test" />
  <p:commandButton id="testbutton" action="#{validationView.showTest}"  value="Test" validateClient="true" />
  <p:message for="test" />
</h:form>

我似乎没有找到 ValidationMessages,但为什么呢?如果我输入消息而不是占位符“msg.test.validation”,则会显示此消息。

有什么提示吗?

【问题讨论】:

  • 找到原因,我启用了primefaces.CLIENT_SIDE_VALIDATION。禁用时,会找到消息。但我仍然没有找到保持该属性启用的解决方案。

标签: java primefaces bean-validation


【解决方案1】:

这应该在 prime-faces 组件中工作:

<p:inputText validatorMessage="#{message['msg.test.validation']}" />

【讨论】:

  • 有效,但 message 不能引用 ValidationMessage 而是引用放置在包文件夹中的 messages.properties。不是100%我想做的。例如。我无法使用 {0} 在 ValidationMessages 文件中包含字段名称我可以做什么
  • 我在这里遇到了同样的问题。解决方案是在 primefaces 客户端验证中不起作用。如果 p:comandButton 具有 clientValidation=true 那么 beanvalidation.js 文件也不会包含您的自定义消息。我们禁用了此功能,现在完成了一个请求以验证该属性。文件是资源文件夹根目录中的 ValidationMessages.properties。对我来说是最简单的方法。
  • 是的,您不能包含像 {0} 这样的序数,但您不妨使用 {max} 、 {min} ,它们是 bean 验证参数。
  • 对我来说,客户端验证比要提及的字段名称更重要。所以我现在正在使用上述解决方案。
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2014-11-29
  • 2017-04-07
  • 1970-01-01
  • 2020-01-17
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多