【问题标题】:Include field name in error messages generated by annotated validators in JSF在 JSF 中带注释的验证器生成的错误消息中包含字段名称
【发布时间】:2023-04-10 03:23:01
【问题描述】:

在我的Java代码中使用像javax.validation.constraints.Size这样的bean验证非常方便,比如:

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

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

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

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

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

但是没有值被替换为 {0}。结果是,虽然带注释的验证器在我可以为每个表单字段包含单独的&lt;p:message /&gt; 的简单页面上工作得很好,但对于需要对我的消息进行分组的更复杂的(例如选项卡式)表单,它们并不能很好地工作在页面顶部。是否有任何解决方法,还是我唯一合理的选择是使用 JSF 验证器?

【问题讨论】:

    标签: jsf-2 bean-validation


    【解决方案1】:

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

    例如

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

    您还需要覆盖 JSF 的 bean 验证器消息的默认格式。您需要在 &lt;message-bundle&gt; of faces-config.xml 中指定的 JSF 消息包中添加以下条目:

    javax.faces.validator.BeanValidator.MESSAGE = {1} {0}
    

    在这个特定条目中,{1} 将是 JSF 输入组件的标签,{0} 将是 bean 验证器的消息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多