1

我有一个引用其他 bean 集合的 bean。我使用@Valid在验证中包含所有引用的 bean。

public class MasterBean {
    @Valid
    private Collection<DetailBean> details;
    ... 
}

public class DetailBean {
    private String id;

    @NotBlank(message = "{name_not_blank_message_key}")
    private String name;
    ...
}

到目前为止,这工作正常,用户从所有DetailBean实例中获取所有验证错误消息。但是,错误消息不包含有关它们与哪些实例相关的任何指示。理想情况下,用户应该看到类似“缺少某事物的名称”的内容,其中某事物是给定实例的属性(例如id)。不幸的是,普通的 MessageInterpolator 只允许静态注释参数的占位符(如{min})并且不支持替换 bean 属性。

我已经阅读了几篇相关的帖子,也许这一篇是最接近的,但在我的情况下似乎没有一个建议是可行的(除了自己的 MessageInterpolator 实现 - 我更害怕......)。

更多背景知识:我正在开发一个广泛使用 RichFaces 标记的 JSF 2 项目。要验证的 bean 是 JSF 页面的支持 bean 的一部分,验证由<rich:graphValidator>表单提交时的标记触发。后端是 Hibernate Validator。

4

1 回答 1

0

如果您只想插入已验证的值并且您使用的是 Hibernate Validator 4.x,则可以使用ValueFormatterMessageInterpolator。它也是一个自定义的 MessageInterpolator,但您不必自己实现任何东西。

Bean Validation 1.1 和 Hibernate Validator 5 将提供完全可定制的渲染(包括使用表达式语言导航 bean 属性)。这些功能已实现,但尚未在最终版本中可用。另见BVAL-223HV-676

于 2013-01-31T10:52:47.450 回答