3

我的资源包中定义了 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.

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

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

4

1 回答 1

2

显然,这种奇怪的行为是“按设计的”。本文总结了所有信息。

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

<property name="alwaysUseMessageFormat" value="true"/>
于 2015-06-02T07:48:26.547 回答