2010-09-03 69 views
52

我想在EL(表達式語言)中連接三態運算符中的字符串。EL中的字符串串聯

假設有一個名爲value的變量。如果它是空的,我想使用一些默認文本。否則,我需要附加一些靜態文本。

${(empty value)? "none" : value + " enabled"} 

但是這不會編譯。什麼是寫這個的正確方法?或者這甚至有可能?

回答

42

這個答案已經過時了。技術已經發展。除非您使用舊版系統,否則請參閱Joel's answer


EL中沒有字符串連接運算符。如果您不需要連接字符串傳遞到一些其他的操作,只是把這些表達彼此相鄰:

${value}${(empty value)? 'none' : ' enabled'} 
38

如果你已經在EL 3.0(Java EE的7; WildFly,Tomcat的8,GlassFish的4等),那麼你可以使用這個新的+=操作:

<c:out value="${empty value ? 'none' : value += ' enabled'}" /> 

如果你然而不在EL 3.0上,並且value是真實的java.lang.String實例(因此不是例如java.lang.Long),則使用EL 2.2(Java EE 7; JBoss AS 6/7,Tomcat 7,GlassFish 3等)能夠調用直接帶有參數的方法,然後應用於String#concat()

<c:out value="${empty value ? 'none' : value.concat(' enabled')}" /> 

或者如果你連上EL 2.2然而,然後使用JSTL <c:set>創建一個新的EL變量,只是內聯的價值連接值:

<c:set var="enabled" value="${value} enabled" /> 
<c:out value="${empty value ? 'none' : enabled}" /> 
0

1. +(運營商)使用EL沒有影響到這一點。 2.so這是使用的方式

<c:set var="enabled" value="${value} enabled" /> 


<c:out value="${empty value ? 'none' : enabled}" /> 

對您有幫助嗎?

+0

縮進四個空格代碼塊,並使用反引號字符逸出角括號。 http://stackoverflow.com/editing-help – McDowell 2010-09-04 15:23:30

+5

與BalusC完全相同的解決方案,但一天後?嗯... – neizan 2013-05-15 12:13:20

91

隨着EL 2,你可以做到以下幾點:

#{'this'.concat(' is').concat(' a').concat(' test!')} 
+4

'$ {'this'.concat('is')。concat('a')。concat('test!')}'是常規形式。 – 2014-01-29 11:46:42

+0

這是否適用於非字符串類型,例如'$ {'我am'.concat('數字').concat(1).concat('!')}'? – 2015-07-29 22:30:52

+1

@MartinCarney concat()只支持字符串參數 – 2015-07-30 07:23:34

11

由於表達語言3.0,它是有效使用+ =操作字符串連接。

${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0 

引用EL 3.0 Specification

字串連接操作符

爲了評價

A += B 
  • 脅迫A和B的字符串。
  • 返回A和B的連接字符串。
1

Mc Dowell's answer是對的。我只想補充的改善,如果萬一你可能需要返回變量的值:

${ empty variable ? '<variable is empty>' : variable } 
0

它也可以是一個偉大的想法使用CONCAT爲EL + MAP + JSON問題就像這個例子:

#{MYMAP [「」。CONCAT(本身份識別碼)。內容}