2010-07-06 99 views
68

如何连接EL中的字符串?JSP EL字符串串联

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

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

它抛出一个异常尝试投放'hello'Double

+0

http://stackoverflow.com/questions/296398/concatenate-strings-in-jsp-el – skaffman 2010-07-06 20:03:30

+0

只要使用'hello'.concat(var2) – 2015-08-06 05:05:46

回答

59

+运营商总是意味着数值除了在JSP EL 。要进行字符串连接,您必须使用多个相邻的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版本。

+0

我希望我不会那样做...每次重复条件。我的例子是一个简化,在真实情况下,我将不得不重复这个例子,每次我想要做3次:( – Kyle 2010-07-06 20:15:59

66

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

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

这样做的好处是,你也可以通过这个入功能,例如

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

请注意,这只适用于全新的EL 2.2,而不适用于2001年之前的EL版本和现在 – BalusC 2011-03-30 12:47:32

11

已经提到的所有多了一个选择:

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

我知道这是一个老话题,但是这个问题的答案在过去六个月中已经发生了变化,重要的是要注意这个变化,IMO(因为我通过谷歌搜索“el连接字符串”发现了这一点)。

由于EL表达式3.0(公众投票批准了2012年8月,与Java EE 7发布),在最初使用的提问语法的扭转现在有效:

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

有很大的分歧与使用+=而不是+,但它是它是什么。这将按预期正确评估和连接字符串。您也可以使用cat运营商,而不是运营商+=

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

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

编辑2015-02-19要注意,最终的运营商是+=而不是+最初的回答。

+3

很好的答案看到未来!+1 – gavenkoa 2013-03-26 11:57:28

+3

不幸的是,这是不正确的。在最后时刻几乎所有人都感到非常委屈,他们将操作员从完全合乎逻辑的“+”改变为高度混淆的“+ =”。我不知道这些人吸烟是什么:X – 2015-02-12 14:07:41

+0

德克斯特是正确的。感谢您的澄清。我将编辑我的答案。 – 2015-02-20 03:25:18