已经提到的所有方法的另一种选择:
此问题已经在这里有了答案:
如何在EL中连接字符串?
我想做这样的事情,但是不起作用:
${var1 == 0 ? 'hi' : 'hello ' + var2}
[尝试将'hello'
强制转换为Double
时引发异常
+
运算符在JSP Expression Language中始终表示数字加法。要进行字符串连接,您将必须使用多个相邻的EL表达式,例如${str1}${str2}
。
如果我正确阅读了您的示例,可以写成:
${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}
另一种可能性是使用JSTL,它更长,但是如果有更多文本取决于var1
,则可能更清晰:
<c:choose>
<c:when test="${var1 == 0}">hi</c:when>
<c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>
根据JSP版本,可能不需要c:out
。
使用Java字符串连接效果更好。
#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}
这里的好处是您还可以将其传递给函数,例如
#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
[我知道这是一个老话题,但是这个问题的答案在过去的六个月中已经改变,重要的是要注意,IMO(因为我是通过谷歌搜索“ el concatenatestrings”发现的。]
从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年底之前的某个时候,也许最早在秋天。
[Edited 2015-02-19]编辑注意,最终运算符是+=
,而不是最初回答的+
。
已经提到的所有方法的另一种选择:
<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
已经提到的所有方法的另一种选择: