在我的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验证器?
答案 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验证器的消息。