web-dev-qa-db-ja.com

ELの文字列連結

EL(Expression Language)の三項演算子内で文字列を連結したいと思います。

Valueという名前の変数があるとします。空の場合、デフォルトのテキストを使用します。それ以外の場合は、静的テキストを追加する必要があります。

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

ただし、これはコンパイルされません。これを書く正しい方法は何でしょうか?それともこれは可能ですか?

54
Tom Tucker

この答えは時代遅れです。技術は進歩しました。レガシーシステムを使用している場合を除き、 Joel's answer を参照してください。


ELには文字列連結演算子はありません。連結された文字列を他の操作に渡す必要がない場合は、次の式を並べて配置します。

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

EL 2を使用すると、次のことができます。

#{'this'.concat(' is').concat(' a').concat(' test!')}
99
Joel Richard

既に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}" />
_
40
BalusC

Expression Language 3.0以降、文字列の連結に+ =演算子を使用することは有効です。

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

引用 EL 3.0仕様

文字列連結演算子

評価します

A += B 
  • AおよびBを文字列に強制します。
  • AとBの連結文字列を返します。
12
Aniket Kulkarni

Mc Dowellの答え は正しい。変数の値を次のように返す必要がある場合に備えて、改良を加えたいだけです。

${ empty variable ? '<variable is empty>' : variable }
1
Mohammad Faisal

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}

0