JSP EL字符串连接

时间:2010-07-06 19:47:16

标签: jsp el

如何在EL中连接字符串?

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

${var1 == 0 ? 'hi' : 'hello ' + var2}

尝试将'hello'投射到Double

时抛出异常

4 个答案:

答案 0 :(得分:76)

使用java字符串连接可以更好地工作。

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}

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

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}

答案 1 :(得分:61)

+运算符始终表示jsp el中的数字加法。要进行字符串连接,您必须使用多个相邻的el表达式,如${str1}${str2}。如果我正确地阅读了你的例子,可以写成:

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}

编辑:另一种可能性是使用jstl,如果有更多文本依赖于var1,则jstl会更长但可能会更清晰:

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>

可能不需要c:out,具体取决于jsp版本。

答案 2 :(得分:34)

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

自EL Expression 3.0(2012年8月公开投票,Java EE 7发布)以来,提问者最初使用的语法有所改变:

${var1 == 0 ? 'hi' : 'hello ' += var2}

使用+=代替+存在很多不同意见,但事实就是这样。这将正确地评估和连接字符串按预期。您也可以使用cat运算符代替+=运算符:

${var1 == 0 ? 'hi' : 'hello ' cat var2}

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

已编辑2015-02-19 ,请注意最终的运算符为+=,而不是最初回答的+

答案 3 :(得分:13)

已经提到的所有内容的另一种选择:

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}