JSP EL字符串连接

Kyl*_*yle 75 jsp el

如何在EL中连接字符串?

我想做这样的事情,但它不起作用:

${var1 == 0 ? 'hi' : 'hello ' + var2}
Run Code Online (Sandbox Code Playgroud)

它抛出异常试图转换'hello'Double

小智 76

使用java字符串连接效果更好.

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}
Run Code Online (Sandbox Code Playgroud)

这里的好处是你也可以将它传递给一个函数

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅适用于全新的EL 2.2,而不适用于2001年至今的旧EL版本. (11认同)

Jör*_*ann 62

+运营商总是意味着数值除了在JSP EL中.要进行字符串连接,您必须使用多个相邻的el表达式${str1}${str2}.如果我正确地阅读了你的例子,可以写成:

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}
Run Code Online (Sandbox Code Playgroud)

编辑:另一种可能性是使用jstl,它更长但如果有更多文本取决于可能更清楚var1:

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

c:out可能并不需要,根据不同的JSP版本.


Nic*_*ams 38

我知道这是一个古老的话题,但是这个问题的答案在过去的六个月里已经改变了,重要的是要注意改变,IMO(因为我通过谷歌搜索"el concatenate strings"发现了这个).

截至EL Expression 3.0(2012年8月批准的公共选票,随Java EE 7发布),提问者最初使用的语法扭曲现在有效:

${var1 == 0 ? 'hi' : 'hello ' += var2}
Run Code Online (Sandbox Code Playgroud)

对于使用+=而不是+,它有很多不同意见,但事实就是如此.这将正确地评估和连接字符串按预期.您也可以使用cat运算符代替+=运算符:

${var1 == 0 ? 'hi' : 'hello ' cat var2}
Run Code Online (Sandbox Code Playgroud)

虽然现在这是合法的,但请注意,在您的Web容器(Tomcat,Jetty,GlassFish等)发布支持Java EE 7/EL 3.0的新版本之前,您将无法使用它.预计这将在2013年底之前的某个时间,也许早在秋季.

编辑2015-02-19注意到最终的操作员是,+=而不是+最初的回答.

  • 不幸的是,这是不正确的.在最后一刻,几乎每个人都感到非常不满,他们将操作员从完全合乎逻辑的"+"改为高度混乱的"+ =".我不知道这些家伙在吸烟:X (5认同)
  • 很高兴看到未来!+1 (3认同)

Dav*_* L. 13

已经提到的所有内容的另一种替代方案:

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
Run Code Online (Sandbox Code Playgroud)