【问题标题】:String concatenation in EL for dynamic ResourceBundle keyEL 中用于动态 ResourceBundle 键的字符串连接
【发布时间】:2011-06-18 15:09:57
【问题描述】:

我有一个包含以下条目的资源包:

entry1=value1
entry2=value2
entry3=value3

在我的 JSF 页面中,我尝试动态使用这些键。条目的 ID 来自托管 bean。我认为应该是这样的:

<h:outputText value="#{msg['entry' managedBean.entryIndex]}"/>

我怎样才能做到这一点?

【问题讨论】:

    标签: jsf internationalization el string-concatenation resourcebundle


    【解决方案1】:

    这对我有用:在 [] 之外连接

    <h:outputText value="#{msg['entry'].concat(managedBean.entryIndex)}" />
    

    【讨论】:

      【解决方案2】:

      如果您已经使用 Servlet 3.1 / EL 3.0(Tomcat 8、WildFly 8、GlassFish 4 等),请使用新的 EL 3.0 += 运算符:

      <h:outputText value="#{msg['entry' += managedBean.entryIndex]}" />
      

      如果您只使用 Servlet 3.0 / EL 2.2(Tomcat 7、JBoss AS 6/7、GlassFish 3 等),请利用新的 EL 2.2 功能直接调用 String#concat() 等方法:

      <h:outputText value="#{msg['entry'.concat(managedBean.entryIndex)]}" />
      

      如果您甚至还没有使用 Servlet 3.0 / EL 2.2,请使用 &lt;c:set&gt; 创建另一个内联所需 EL 表达式的变量:

      <c:set var="key" value="entry#{managedBean.entryIndex}" />
      <h:outputText value="#{msg[key]}" />
      

      【讨论】:

      • 我希望有一个单行的方式来解决这个问题,但是这个 facelet 版本已经足够好了。非常感谢
      • 不客气。请注意,这是 EL 限制,而不是 JSF 限制。 EL 没有在表达式内进行字符串连接的工具。
      【解决方案3】:

      这应该可以解决您的问题:

      <h:outputText value="#{msg['entry'.concat(managedBean.entryIndex)]}"/>
      

      【讨论】:

        【解决方案4】:

        我认为你必须编写一个 facelets 函数 concat(str1, str2)

        【讨论】:

        • 非常感谢您的提示,它适用于 facelet 功能。
        猜你喜欢
        • 1970-01-01
        • 2012-07-03
        • 2010-09-22
        • 2011-04-08
        • 2011-09-11
        • 2011-03-12
        • 2014-08-08
        • 1970-01-01
        • 2011-12-11
        相关资源
        最近更新 更多