JSP EL字符串串联[重复]

问题描述 投票:74回答:4

此问题已经在这里有了答案:

如何在EL中连接字符串?

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

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

[尝试将'hello'强制转换为Double时引发异常

jsp el
4个回答
62
投票

+运算符在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


76
投票

使用Java字符串连接效果更好。

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

这里的好处是您还可以将其传递给函数,例如

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

38
投票

[我知道这是一个老话题,但是这个问题的答案在过去的六个月中已经改变,重要的是要注意,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}

13
投票

已经提到的所有方法的另一种选择:

© www.soinside.com 2019 - 2024. All rights reserved.