EL(Expression Language)の三項演算子内で文字列を連結したいと思います。
Valueという名前の変数があるとします。空の場合、デフォルトのテキストを使用します。それ以外の場合は、静的テキストを追加する必要があります。
${(empty value)? "none" : value + " enabled"}
ただし、これはコンパイルされません。これを書く正しい方法は何でしょうか?それともこれは可能ですか?
この答えは時代遅れです。技術は進歩しました。レガシーシステムを使用している場合を除き、 Joel's answer を参照してください。
ELには文字列連結演算子はありません。連結された文字列を他の操作に渡す必要がない場合は、次の式を並べて配置します。
${value}${(empty value)? 'none' : ' enabled'}
EL 2を使用すると、次のことができます。
#{'this'.concat(' is').concat(' a').concat(' test!')}
既に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}" />
_
Expression Language 3.0以降、文字列の連結に+ =演算子を使用することは有効です。
${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0
引用 EL 3.0仕様 。
文字列連結演算子
評価します
A += B
- AおよびBを文字列に強制します。
- AとBの連結文字列を返します。
Mc Dowellの答え は正しい。変数の値を次のように返す必要がある場合に備えて、改良を加えたいだけです。
${ empty variable ? '<variable is empty>' : variable }
1。+(演算子)は、ELを使用する場合には影響しません。 2.soこれは、それを使用する方法です
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
これはあなたに役立ちますか?
この例のように、EL + MAP + JSONの問題にconcatを使用することも素晴らしいアイデアです。
#{myMap [''。concat(myid)]。content}