在JSF中由带注释的验证器生成的错误消息中包含字段名称

时间:2012-01-23 21:26:33

标签: jsf-2 bean-validation

在我的Java代码中使用javax.validation.constraints.Size之类的bean验证非常方便,例如:

@Size(min=1,max=30)protected String custName;

而不是嵌入在.xhtml页面中的wordier等价物,例如:

<f:validateLength minimum="1" maximum="30" />

我遇到的问题是我无法在错误消息中显示字段名称。我可以通过将以下条目添加到源目录的根目录中的ValidationMessages.properties来自定义消息:

javax.validation.constraints.Size.message={0} value is too long.

但没有值取代{0}。结果是,虽然带注释的验证器适用于简单的页面,我可以为每个表单字段包含一个单独的<p:message />,但它们对于我需要组合的更复杂(例如选项卡式)表单不能很好地工作我在页面顶部的消息。有没有解决方法,或者我唯一合理的选择是使用JSF验证器?

1 个答案:

答案 0 :(得分:4)

{0}由视图端输入组件的label属性表示,默认为未指定时的客户端ID。

E.g。

<h:inputText value="#{bean.customer.name}" label="Customer name">

您还需要覆盖JSF的bean验证程序消息的默认格式。您需要在<message-bundle>的{​​{1}}中指定的JSF消息包中添加以下条目:

faces-config.xml

在此特定条目中,javax.faces.validator.BeanValidator.MESSAGE = {1} {0} 将是JSF输入组件的标签,{1}将是bean验证器的消息。