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


我想获得如下的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

有什么方法可以克服这个问题吗?谢谢。

乔治


27
2017-12-21 10:29


起源




答案:


问题的原因是 , (逗号)是默认分隔符。所以最后spring消息标签将获得String A,B,C,D,E,F 用于参数 arguments,它会将此字符串拆分为6个不同的内部参数。

您必须更改分隔符。如果你使用 ; 例如,它会工作。

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

@看到 Spring参考:附录F.6消息标记


49
2017-12-21 11:09



添加`htmlEscape =“false”argumentSeparator =“;”`解决了我的问题 - shareef


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

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

而且我也暴露了我的豆子 viewResolver.setExposeContextBeansAsAttributes(true); 之后我可以使用 ${i18n.message("messageCode", value1, value2, value3)} 在我的jsp-views中。


1
2017-12-16 13:14





您还可以将不同的值作为数组发送,并且没有空间让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" />

这样你就不必担心你的新分隔符会在某种程度上再次被用于某个值。


0
2018-06-12 09:04