java - 来自属性文件的 Spring Hibernate 自定义 validator 默认消息

标签 java spring hibernate spring-mvc

我有这个自定义的 spring hibernate validator 和一个经过测试的 message.properties 文件(它有效)但我无法正确设置这部分代码:{EmailExists.user.default}...我的意思是,它没有在属性文件上获取 EmailExists.user.default=blablabla var...

package org.andreadorigo.webapp.validators.costraints;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

import org.andreadorigo.webapp.validators.EmailExistsValidator;

@Documented
@Constraint(validatedBy = EmailExistsValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface EmailExists {

    String message() default "EmailExists.user.default";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

message_it.properties

constraints.dbexists=Il valore inserito è già presente nel database

hibernateContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

    <mvc:annotation-driven validator="validator" />
    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />


    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:properties/messages</value>
                <value>classpath:properties/errors</value>
            </list>
        </property>
    </bean>

    <bean id="localeChangeInterceptor"
        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>

    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="it" />
    </bean>

    <bean id="handlerMapping"
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <ref bean="localeChangeInterceptor" />
        </property>
    </bean>

    <mvc:interceptors>  
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
              <property name="paramName" value="lang"></property>
        </bean>
    </mvc:interceptors>



    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:properties/database.properties</value>
            </list>
        </property>
    </bean>

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.user}" />
        <property name="password" value="${jdbc.password}" />
    </bean>




    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="messageInterpolator" ref="messageInterpolator"></property>
    </bean>
    <bean name="messageInterpolator"
        class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
        <constructor-arg ref="resourceBundleLocator" />
    </bean>
    <bean id="resourceBundleLocator"
        class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
        <constructor-arg ref="messageSource"></constructor-arg>
    </bean>





    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="org.andreadorigo.webapp.entities" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>

        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

</beans>

最佳答案

属性 message 在违反约束时返回创建错误消息的默认键应定义为:

String message() default "{EmailExists.user.default}";

以及 message_it.properties 文件中的相应条目:

EmailExists.user.default=Il valore inserito è già presente nel database

并且您需要注册用于验证@Controller 方法的 validator :

    <bean id="validator"
        class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="messageInterpolator" ref="messageInterpolator"></property>
    </bean>
    <bean name="messageInterpolator"
        class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
        <constructor-arg ref="resourceBundleLocator" />
    </bean>
    <bean id="resourceBundleLocator"
        class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
        <constructor-arg ref="messageSource"></constructor-arg>
    </bean>

    <mvc:annotation-driven validator="validator" />

关于java - 来自属性文件的 Spring Hibernate 自定义 validator 默认消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18945405/

相关文章:

java - Autowiring 依赖项注入(inject)失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException 如何解决它

java - 如何使用 Apache-POI 获取 Excel 工作表的默认列宽?

java - Spring:将一条记录添加到列表中突然创建了一条重复项

mysql - 如何使用 hibernate 设置字符串列的最大可能长度

java - 如何替换Java中xml模板中的第n次出现?

java - 随机变化的变量值。在简单的安卓游戏中

spring - 在 Grails 中动态设置消息 i18n

java - 使用 envers 跟踪收视率

java - Hibernate 没有匹配的认证协议(protocol)

java - Hibernate内部连接非主键