1

我面临一个非常普遍的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 的重音字符转换?谢谢。

4

1 回答 1

0

更新

解决方案很简单,使用htmlEscape="false"in spring:message,默认值为true转义字符

所以

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

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

更新结束

现在我有一个解决方法,但不是解决方案,因为它有限制,所以我将保持这个线程打开,直到有一个通用的解决方案:

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

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

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

alert("${message_miss_duedate}");

但是就像提到的这种方法作为限制,因为很难处理带有变量的运行时响应消息,特别是使用代码模板。

于 2013-07-11T15:10:38.100 回答