Spring MVC验证消息转换

时间:2016-02-25 06:30:49

标签: forms validation spring-mvc internationalization

我正在使用Spring mvc app,并使用国际化为页面实现了西班牙语翻译。我在xml中使用了以下代码

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

 <bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </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="en"/>
    </bean>

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

除验证消息外,所有标签和消息都有效。我在验证器类

中设置验证消息
errors.rejectValue("value1","valid.value1");

在属性文件中我有2个文件中的西班牙语,英文文本。但是

<form:errors path="value1" /> 

无法正常工作。它正在显示文本(我有一些像t与tilda的字母,所以我尝试使用ñ)并且它不起作用。

我的jsp页面顶部有

    <jsp:directive.page contentType="text/html;charset=UTF-8" />

        <head>
            <%@ page isELIgnored="false"%>

              <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
              <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    ................

    </head>

<body>

<form:errors path="value1" />

</body>

我还需要添加其他内容吗?感谢。

2 个答案:

答案 0 :(得分:0)

我能够做到这一点。我所要做的就是将htmlEscape =“false”添加到。我确实尝试过,但我添加到spring:message标签,因此它无法正常工作。感谢。

答案 1 :(得分:0)

我偶然发现了同样的问题并意识到rejectValue方法实际上并没有翻译消息,而如果我使用ValidationUtils,一切正常。

因此,如果您需要没有ValidationUtils类的自定义验证,那么我找到的唯一解决方法是放在