如何在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)
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注意到最终的操作员是,+=而不是+最初的回答.
Dav*_* L. 13
已经提到的所有内容的另一种替代方案:
<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
Run Code Online (Sandbox Code Playgroud)