Javascript中的Spring消息:无法正确显示西班牙语重音字符

时间:2013-07-10 16:12:00

标签: spring jsp java-ee spring-mvc encoding

我面临一个非常普遍的Spring消息问题,但到目前为止还没有一个简单的解决方案,所以希望这里的每个人都可以启发我一点点。

当前Spring MVC应用程序在javascript警报上正确显示西班牙语重音字符时出现问题。警报消息现在显示如下:

Por favor elija la fecha de aplicación

但它应该显示如下:

Por favor elija la fecha de aplicación
当用户验证失败时,会弹出

以上消息,该验证由javascript:

处理
alert("<spring:message code='message_miss_duedate' />");

但如果我把整个字符串用西班牙语写入javascript:

alert("Por favor elija la fecha de aplicación");

输出很好。

问题的原因很明显:&Xacute;是由Spring消息的方法生成的,将西班牙语重音字符转换为HTML友好代码,在html解析时工作正常,但javascript无法识别此类代码

到目前为止,'EncodingFilter'设置为UTF-8

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

与pom设置相同:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

那么,在使用Spring消息时,有没有跳过Spring的重音字符转换?感谢。

1 个答案:

答案 0 :(得分:0)

更新

解决方案非常简单,在htmlEscape="false"中使用spring:message,默认值为true因此转义字符

所以

alert('<spring:message code="message_miss_duedate" htmlEscape="false"/>');

现在弹出的消息看起来很漂亮。

UPDATE结束

现在我有一个解决方法,但没有解决方案,因为它有限制,所以我将保持这个线程开放,直到有一般解决方案:

在控制器中使用Spring MessageSource对象将警报消息传递到uiModel

Locale currentLocale = LocaleContextHolder.getLocale();
uiModel.addAttribute("message_miss_duedate", messageSource.getMessage("message_miss_duedate", null, currentLocale));

因此在javascript中我们可以像普通的JSTL变量一样获取消息

alert("${message_miss_duedate}");

但是就像提到这种方法一样,因为很难处理带变量的运行时响应消息,尤其是代码模板。