【发布时间】:2011-03-12 12:06:22
【问题描述】:
如何在 EL 中连接字符串?
我想做这样的事情,但它不起作用:
${var1 == 0 ? 'hi' : 'hello ' + var2}
尝试将'hello' 转换为Double 时会引发异常
【问题讨论】:
-
只需使用 'hello'.concat(var2)
如何在 EL 中连接字符串?
我想做这样的事情,但它不起作用:
${var1 == 0 ? 'hi' : 'hello ' + var2}
尝试将'hello' 转换为Double 时会引发异常
【问题讨论】:
使用 java 字符串连接效果更好。
#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}
这里的好处是你也可以将它传递给一个函数,例如
#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
【讨论】:
+ 运算符在 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>
c:out 可能不需要,具体取决于 JSP 版本。
【讨论】:
我知道这是一个老话题,但这个问题的答案在过去六个月中发生了变化,重要的是要注意这一变化,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 年 2 月 19 日编辑,注意最终运算符是 +=,而不是最初回答的 +。
【讨论】:
已经提到的所有内容的另一种选择:
<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
【讨论】: