2014-04-23 27 views
1

我想我的自定义错误消息,以下列方式:如何访问JSR-303消息中的字段值?

假设一个Person类的声明如下:

@Size(min=10, max=200, message="{name.size}") 
private String name; 

在在ValidationMessages.properties声明的错误信息,我想输出领域价值为好,即我愿做这样的事情:

name.size=The name '{name}' is invalid, its size must be between {min} and {max} 

假定场“名称”的内容是“ABC”。那么错误信息应该是这样的:

名字“ABC”是无效的,它的大小必须在10和200

之间

用于分钟的替代最高的作品,但我怎么能做到这一点的字段值?

回答

5

With BeanValidation 1.0我认为有一种方法可以使用消息interpolater获取值。我相信在使用bean验证1.0的hibernate实现时,这是作为其捆绑包的一部分提供的。

通过使用BeanValidation 1.1,它可以通过EL表达式获得。字段值现在可以通过名称validatedValue访问。如果你可以尝试使用最新版本。你的消息是这样的:

name.size=The name '${validatedValue}' is invalid, its size must be between {min} and {max} 
+0

这是一个很好的提示。 我从Spring 3.x升级到4.x. 然后,我添加/升级​​到以下构件: javax.el javax.el-API 2.2.5 org.glassfish.web javax.el 2.2.6 javax.validation validation- API 1.1.0.Final org.hibernate作为 休眠-验证 5.1.0.Final – Horowitzathome

+0

让我分享与此相关的另一个问题:我使用的春天,我的自定义验证程序里面执行我使用的是自动装配功能。从Junit案例我首先直接验证,然后坚持实体经理再次验证的实体。直接在自定义验证程序中验证autowire的工作时,它不适用于通过实体管理器间接调用它。为了使这个工作,你必须通过EntityManagerFactory的javax.persistence.validation.factory属性指定Spring的LocalValidatorFactoryBean。 – Horowitzathome

+0

我在这个场景中没有遇到任何问题,但我不使用Spring,我只是坚持开箱即用JEE – ZeusSelerim