Hibernate表达式语言不起作用

时间:2016-08-02 07:41:45

标签: spring-mvc el hibernate-validator

我正在使用spring + hibernate验证器。我正在尝试使用$ {validatedValue},但它不起作用。我的核心依赖项:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.0.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>javax.el-api</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.4</version>
        </dependency>

我的字段由@Email注释,validatedValue以EL:

提供
    @Column(name = "VALUE_", nullable = false)
    @Email(message = "Specified e-mail address: ${validatedValue} is invalid.")
    private String value;

如果我提供“thisIsNotEmail”作为电子邮件验证结果我在“指定的电子邮件地址:$ validatedValue无效”消息中没有“指定的电子邮件地址:thisIsNotEmail无效”。有谁知道它为什么不起作用?我尝试了WindFly10和Pivotal 3.1,但仍然没有运气让它工作......

我希望得到像这样的结果:http://www.journaldev.com/3626/hibernate-validator-jsr303-example-tutorial

2 个答案:

答案 0 :(得分:0)

您可以尝试更改:

@Email(message = "Specified e-mail address: {validatedValue} is invalid.")

带花括号的封闭键名称应该有效。

希望得到这个帮助。

答案 1 :(得分:0)

通过更改messageSource的配置解决..我的useCodeAsDefaultMessage为true,应为false:

messageSource.setUseCodeAsDefaultMessage(false);

Full bean:

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasename("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setUseCodeAsDefaultMessage(false);
        messageSource.setFallbackToSystemLocale(false);
        return messageSource;
    }