【问题标题】:I18N charset Encoding Spring-JSPI18N 字符集编码 Spring-JSP
【发布时间】:2015-01-06 11:32:37
【问题描述】:

我正在尝试将 é 显示为我的 form:input 字段的标题,但我无法正常工作。

示例 1:

<form:input type="text" path="something" title="é"/>

输出:

示例 2:

<input type="text" title="<spring:message code="mySpecialChar" />"/>

输出:

示例 3:

<form:input type="text" path="something" title="<spring:message code="mySpecialChar" />"/>

输出:

错误,我不允许这样做,为了解决这个问题,我尝试了示例 4。

示例 4:

<spring:message code=mySpecialChar" var="mySpecialChar"/>
<form:input type="text" path="something" title="${mySpecialChar}"/>

输出:

我怎样才能让我的示例 4 正常工作?

【问题讨论】:

    标签: jsp spring-mvc character-encoding internationalization jstl


    【解决方案1】:

    经过快速搜索,我发现我必须将htmlEscape="false" 添加到我的&lt;spring:message&gt; 标签中。

    Spring:message docs

    【讨论】:

      【解决方案2】:

      您需要在控制器中取消转义值,首先您必须自动连接您的 MessageSource

      @Autowired
      private MessageSource messageSource;
      

      你可以使用例如取消转义。 StringEscapeUtils

       String message = messageSource.getMessage("mySpecialChar", null, Locale.getDefault());
       model.addAttribute("mySpecialChar", StringEscapeUtils.unescapeHtml([YOUR VALUE]));
      

      不仅仅是

      <form:input type="text" path="something" title="${mySpecialChar}"/>
      

      【讨论】:

      • 我没有从控制器发送任何值,我使用的是 Spring I18N;并且所有的消息都存储在一个属性文件中,这意味着我不能做这样的事情来解决这个问题。
      • 是的,所以我明白了,我已经添加了如何从控制器内的属性文件中获取值的部分内容。对于您的答案,如果它有效,那就太好了。但是我很惊讶,因为整个麻烦在于您使用的是标题中的值,而 htmlEscape 会将其转义并存储在输出流中(因此基本上可以正确显示),但它不会改变实际变量,所以在你的标题中,你仍然会看到 html 实体。这是我所期待的,虽然我可能错了
      • np,如果它对您有任何帮助,我很高兴
      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 2011-01-04
      相关资源
      最近更新 更多