【问题标题】:String Concatenation in EL [duplicate]EL中的字符串连接[重复]
【发布时间】:2011-04-08 02:28:23
【问题描述】:

我想在 EL(表达式语言)的三元运算符中连接一个字符串。

假设有一个名为 value 的变量。如果它是空的,我想使用一些默认文本。否则,我需要在其上附加一些静态文本。

${(empty value)? "none" : value + " enabled"}

但是这不会编译。写这个的正确方法是什么?或者这甚至可能吗?

【问题讨论】:

    标签: java string jsp jstl el


    【解决方案1】:

    如果您已经使用 EL 3.0(Java EE 7;WildFly、Tomcat 8、GlassFish 4 等),那么您可以为此使用新的 += 运算符:

    <c:out value="${empty value ? 'none' : value += ' enabled'}" />
    

    如果您还没有使用 EL 3.0,并且 value 是真正的 java.lang.String 实例(因此不是 java.lang.Long),那么请使用 EL 2.2(Java EE 7;JBoss AS 6/7 、Tomcat 7、GlassFish 3 等)使用参数调用直接方法的能力,然后您将其应用于 String#concat()

    <c:out value="${empty value ? 'none' : value.concat(' enabled')}" />
    

    或者,如果您还没有使用 EL 2.2,那么使用 JSTL &lt;c:set&gt; 创建一个新的 EL 变量,其中连接的值刚刚内联在值中:

    <c:set var="enabled" value="${value} enabled" />
    <c:out value="${empty value ? 'none' : enabled}" />
    

    【讨论】:

    • 上述+= 方法是目前为止最正确的解决方案。谢谢!
    【解决方案2】:

    使用 concat 来解决 EL + MAP + JSON 问题也是一个好主意,就像在这个例子中一样:

    #{myMap[''.concat(myid)].content}

    【讨论】:

      【解决方案3】:

      这个答案已经过时了。技术已经向前发展。除非您使用的是旧系统,否则请参阅 Joel's answer


      EL 中没有字符串连接运算符。如果您不需要将连接的字符串传递给其他操作,只需将这些表达式放在一起即可:

      ${value}${(empty value)? 'none' : ' enabled'}
      

      【讨论】:

        【解决方案4】:

        Mc Dowell's answer 是对的。如果您可能需要将变量的值返回为:

        ${ empty variable ? '<variable is empty>' : variable }
        

        【讨论】:

          【解决方案5】:

          从表达式语言 3.0 开始,使用 += 运算符进行字符串连接是有效的。

          ${(empty value)? "none" : value += " enabled"}  // valid as of EL 3.0
          

          引用EL 3.0 Specification

          字符串连接运算符

          评估

          A += B 
          
          • 将 A 和 B 强制转换为字符串。
          • 返回 A 和 B 的连接字符串。

          【讨论】:

            【解决方案6】:

            使用 EL 2,您可以执行以下操作:

            #{'this'.concat(' is').concat(' a').concat(' test!')}
            

            【讨论】:

            • ${'this'.concat(' is').concat(' a').concat(' test!')} 将是正常形式。
            • 这是否适用于非字符串类型,例如${'I am'.concat(' number ').concat(1).concat('!')}?
            • @MartinCarney concat() 只支持字符串参数
            • 调用非getter方法需要EL 2.2(见How can I check what version of EL is server using
            • @Joel 不会 Java 将 String.concat() 的(非字符串)参数强制转换为 String 自动调用其 toString() 方法?
            【解决方案7】:

            1.+(操作符)对EL的使用没有影响。 2.so this is the way, to use that

            <c:set var="enabled" value="${value} enabled" />
            
            
            <c:out value="${empty value ? 'none' : enabled}" />
            

            这对你有帮助吗?

            【讨论】:

            • 为代码块缩进四个空格并使用反引号字符来转义尖括号。 stackoverflow.com/editing-help
            • 与 BalusC 完全相同的解决方案,但要晚一天?嗯……
            猜你喜欢
            • 2011-03-12
            • 1970-01-01
            • 2011-01-12
            • 1970-01-01
            • 2012-07-03
            • 1970-01-01
            • 2010-09-22
            • 2013-06-10
            • 2011-09-11
            相关资源
            最近更新 更多