【问题标题】:Spring message in Javascript: cannot display Spanish accent characters properlyJavascript 中的 Spring 消息:无法正确显示西班牙重音字符
【发布时间】:2013-07-10 16:12:00
【问题描述】:

我面临一个很普遍的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");

输出很好。

问题的原因很明显:&amp;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 的重音字符转换?谢谢。

【问题讨论】:

  • 客户端警报中的消息是什么样的?
  • @nif 谢谢,消息看起来就像消息中描述的那样,它应该看起来像:“Por喜爱elija la fecha de aplicación”,但是,javascript 无法解释它。跨度>
  • @nif 我做了一些更改,现在 javascript 警报仍然存在问题,但看起来不同。
  • 尝试在消息中直接使用 UTF-8 字符或使用 &amp;#nnnn; 对其进行编码 - AFAIK,XHTML 不支持 HTML 实体。
  • @nif 谢谢我们有一个相对简单的解决方案,我已经更新了整篇文章,希望能帮助你更多地了解正在发生的事情。

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


【解决方案1】:

更新

解决方法很简单,在spring:message中使用htmlEscape="false",默认值是true所以转义字符

所以

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

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

更新结束

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

在控制器中使用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}");

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多