Spring 消息标签的单引号有问题

Spring message tag has troubles with the single quote character

我的资源包中定义了 3 个属性:

test.key1 = Just a normal snippet.
test.key2 = snippet with {0} arguments {1}.
test.key3 = snippet with 'charac'ter'.
test.key4 = snippet with {0} arguments' and 'characters {1}.

这是我在 jsp 中访问它们的方法:

<spring:message code="test.key1"/>
<spring:message code="test.key2" arguments="ARG1,ARG2"/>
<spring:message code="test.key3"/>
<spring:message code="test.key4" arguments="ARG1,ARG2"/>

渲染它们看起来像这样:

Just a normal snippet.
snippet with ARG1 arguments ARG2.
snippet with 'charac'ter'.
snippet with ARG1 arguments and characters {1}.

所以基本上发生的事情是:一旦出现 '(单引号)字符,就不再填充参数并且不再呈现单引号。有趣的是 spring 当单独应用参数或单引号时没有问题。

我能够像这样使用 2x 单引号修复测试场景 4:

test.key4 = snippet with {0} arguments'' and ''characters {1}.

哪个也正确呈现

snippet with ARG1 arguments' and 'characters ARG2.

当然,这是一个维护噩梦:所有包含单引号但没有参数的属性都应该有 1 倍的单引号,所有包含单引号字符和参数的属性都需要 2 倍的单引号。

为什么会这样,有没有办法解决这种不良行为?

显然,这种奇怪的行为是 "as designed"。 this article.

中汇总了所有信息

要解决此问题,您可以仅在具有参数的属性中将单引号加倍,或者向消息资源 bean 添加额外的 属性,在这种情况下,所有单引号都必须加倍,即使在没有参数的属性。这更加一致!

<property name="alwaysUseMessageFormat" value="true"/>