在messages.properties中带双引号的字符串无法正确显示

时间:2014-05-31 05:25:10

标签: spring-mvc

我正在做一个Spring Web应用程序。在我的messages.properties文件中,有一个单行字符串,如下所示:

label.name.tooltip=The "name" field ...

我的JSP文件显示如下字符串:

<spring:message code="label.name.tooltip" />

但是,显示的文字只是“The”,表示“name”中的部分被剪切。

我不知道为什么会这样。谷歌搜索和双引号之前添加反斜杠的方式不起作用。

问候并感谢!

更新

整个问题是由于我在A标签的title属性中使用字符串引起的,如下所示:

a href="#" data-toggle="tooltip" title="<spring:message code="label.name.tooltip" />

正如Bossie暗示的那样,浏览器会从双引号中删除字符串内容。

Misha做了相当多的解释,这有助于我更多地了解消息的工作原理。谢谢,Misha !!!

我在SO处找到了一个解决方案,在我的情况下,使用“name”而不是双引号。希望这有助于其他人。

4 个答案:

答案 0 :(得分:3)

Spring使用MessageSource解析消息代码,而MessageFormat又使用MessageSourceSupport对象。如果您的邮件是应用The '"'name'"' field should not be null, empty, or start with an integer. 规则(已定义here)的受害者,则可以使用单引号转义双引号:

MessageFormat

不幸的是,messages.properties并未声明双引号是特殊字符,所以这实际上只是在黑暗中拍摄。

编辑:

好的。我去尝试了。我按原样加载双引号没有问题。我的test.message = "Hello, world!" 有一行:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestConfiguration.class)
public class TestQuotes {

    @Autowired
    private MessageSource source;

    @Test
    public void test() {
        assertEquals(
            "\"Hello, world!\"", 
            source.getMessage("test.message", null, Locale.US));
    }
}

我的测试看起来像这样:

.jsp

因此,唯一的结论是.jsp处理器使用双引号 - 它绝对不是与消息源相关的对象。我不知道什么对象呈现你的{{1}},但你应该仔细看看它有什么规则来解析注入的值(并且可能尝试双引号或其他东西)。

答案 1 :(得分:0)

在属性文件中使用HTML转义字符而不是双引号可能会有所帮助: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

所以在你的情况下如下:

label.name.tooltip=The &#34;name&#34; field ...

答案 2 :(得分:0)

Spring消息提供了一种方法来转义包含双引号,新行等的消息。
只需将以下内容放在HTML文档中:

<a href="#" title="<spring:message htmlEscape='true' code='label.myLabel'/>" />

或者将以下内容放在Javascript块中:

<script>
    function myFunction() {
        alert("<spring:message javaScriptEscape='true' code='label.myLabel' />");
    }
</script>

通过这种方式,不需要在messages.properties文件中放置HTML转义字符或其他内容。

有关详细信息,请访问this post

答案 3 :(得分:0)

为此您可以使用&#34; \&#34; 在应用程序属性

files.check={hello:'\"hi\"',bello:'bye'}

控制器代码:

@Value("#{${files.check}}")
private Map<String, String> propertyname;

@GetMapping("/check")
public void authUser() {
        System.err.println(propertyname);
}
  

输出:{hello =&#34; hi&#34;,bello = bye}