我想在EL(表達式語言)中連接三態運算符中的字符串。EL中的字符串串聯
假設有一個名爲value的變量。如果它是空的,我想使用一些默認文本。否則,我需要附加一些靜態文本。
${(empty value)? "none" : value + " enabled"}
但是這不會編譯。什麼是寫這個的正確方法?或者這甚至有可能?
我想在EL(表達式語言)中連接三態運算符中的字符串。EL中的字符串串聯
假設有一個名爲value的變量。如果它是空的,我想使用一些默認文本。否則,我需要附加一些靜態文本。
${(empty value)? "none" : value + " enabled"}
但是這不會編譯。什麼是寫這個的正確方法?或者這甚至有可能?
這個答案已經過時了。技術已經發展。除非您使用舊版系統,否則請參閱Joel's answer。
EL中沒有字符串連接運算符。如果您不需要連接字符串傳遞到一些其他的操作,只是把這些表達彼此相鄰:
${value}${(empty value)? 'none' : ' enabled'}
如果你已經在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}" />
1. +(運營商)使用EL沒有影響到這一點。 2.so這是使用的方式
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
對您有幫助嗎?
隨着EL 2,你可以做到以下幾點:
#{'this'.concat(' is').concat(' a').concat(' test!')}
'$ {'this'.concat('is')。concat('a')。concat('test!')}'是常規形式。 – 2014-01-29 11:46:42
這是否適用於非字符串類型,例如'$ {'我am'.concat('數字').concat(1).concat('!')}'? – 2015-07-29 22:30:52
@MartinCarney concat()只支持字符串參數 – 2015-07-30 07:23:34
由於表達語言3.0,它是有效使用+ =操作字符串連接。
${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0
字串連接操作符
爲了評價
A += B
- 脅迫A和B的字符串。
- 返回A和B的連接字符串。
Mc Dowell's answer是對的。我只想補充的改善,如果萬一你可能需要返回變量的值:
${ empty variable ? '<variable is empty>' : variable }
它也可以是一個偉大的想法使用CONCAT爲EL + MAP + JSON問題就像這個例子:
#{MYMAP [「」。CONCAT(本身份識別碼)。內容}
縮進四個空格代碼塊,並使用反引號字符逸出角括號。 http://stackoverflow.com/editing-help – McDowell 2010-09-04 15:23:30
與BalusC完全相同的解決方案,但一天後?嗯... – neizan 2013-05-15 12:13:20