我面临一个非常普遍的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的重音字符转换?感谢。
答案 0 :(得分:0)
解决方案非常简单,在htmlEscape="false"
中使用spring:message
,默认值为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}");
但是就像提到这种方法一样,因为很难处理带变量的运行时响应消息,尤其是代码模板。