【问题标题】:spring message tag with multiple arguments带有多个参数的弹簧消息标签
【发布时间】:2012-01-25 04:17:49
【问题描述】:

我正在尝试获取如下 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

有什么办法可以克服吗?谢谢。

乔治

【问题讨论】:

    标签: java spring jsp jstl


    【解决方案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" />
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        问题的原因是,(逗号)是默认分隔符。所以最后spring消息标签会得到参数arguments的字符串A,B,C,D,E,F,并将这个字符串分成6个不同的消息内部参数。

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

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

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

        【讨论】:

        • 添加 `htmlEscape="false" argumentSeparator=";"` 解决了我的问题
        猜你喜欢
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 2012-03-24
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        相关资源
        最近更新 更多