带有多个参数的spring消息标记

时间:2011-12-21 10:29:09

标签: java spring jsp jstl

我正试图获得如下所示的i18n消息:

messageCode = {0}和{1}以及{2}的测试消息。

在jsp中,我有这个:

<spring:message code="messageCode" 
                arguments="${value1},${value2},${value3}" 
                htmlEscape="false"/>

论点:

value1=A,B
value2=C,D
value3=E,F

我想要的输出:

Test message for A,B and C,D and E,F 

实际输出:

Test message for A and B and C

有没有办法克服这个问题?谢谢。

乔治

3 个答案:

答案 0 :(得分:57)

问题的原因是,(逗号)是默认分隔符。因此,最后spring消息标记将获取参数A,B,C,D,E,F的字符串arguments,并将此字符串拆分为6个不同的内部参数以供消息使用。

您必须更改分隔符。例如,如果您使用;,那么它将起作用。

<spring:message code="messageCode"
       arguments="${value1};${value2};${value3}"
       htmlEscape="false"
       argumentSeparator=";"/>

@See Spring Reference: Appendix F.6 The Message Tag

答案 1 :(得分:1)

我使用完全不同的方法。我的配置中公开了基于数据库的消息源,名称为i18n:

@Bean(name = {"i18n", "messageSource"})
public MessageSource messageSource() {
    return new JpaMessageSource();
}

我还用viewResolver.setExposeContextBeansAsAttributes(true);公开我的豆子 之后我可以在我的jsp-views中使用${i18n.message("messageCode", value1, value2, value3)}

答案 2 :(得分:1)

您也可以将不同的值作为数组发送,并且没有空间让Spring在如何解析字符串参数时出错。

<c:set var="value1" value="A,B;X" />
<c:set var="value2" value="C,D;Y" />
<c:set var="value3" value="E,F;Z" />

<spring:message code="messageCode"
   arguments="${[value1, value2, value3]}"
   htmlEscape="false" />

这样你就不用担心你的新分隔符会在某个时候再次被用在某个值中。