2010-07-06 94 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