我正在做一个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”而不是双引号。希望这有助于其他人。
答案 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 "name" 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}