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}
- 如何在JSP / EL中调用静态方法?
- EL空操作符在JSF中如何工作?
- JSP EL,JSF EL和统一EL之间的区别
- 在JavaScript中访问Java / Servlet / JSP / JSTL / ELvariables
- $ {}和#{}之间有什么区别?
- 方法必须有签名“String method()… …”,但签名“void method()”
- c:forEach抛出javax.el.PropertyNotFoundException:在java.lang.Stringtypes中找不到属性'foo'
- 如何创build一个自定义EL函数来调用一个静态方法?
- 如何使用ELexpression式语言访问对象$ {}