如何在EL中连接字符串?
我想做这样的事情,但它不起作用:
${var1 == 0 ? 'hi' : 'hello ' + var2}
尝试将'hello'
投射到Double
答案 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}