JSP ELstring连接

如何连接EL中的string?

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

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

它会抛出一个exception,试图将'hello'投给Double

+运算符总是表示在jsp el中的数字加法。 要执行string连接,您将不得不使用多个相邻的elexpression式,如${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版本。

使用javastring连接效果更好。

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

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

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

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

从EL Expression 3.0(2012年8月批准的公开投票,随Java EE 7发布)开始,提问者最初使用的语法的转折现在是有效的:

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

对于使用+=而不是+有很多不同意见,但它是这样的。 这将按预期正确评估和连接string。 您也可以使用cat运算符而不是+=运算符:

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

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

编辑2015-02-19注意到,最终的运营商是+=而不是+原来的答案。

上面提到的所有的一个select:

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