web-dev-qa-db-ja.com

JSP EL文字列連結

ELで文字列を連結するにはどうすればよいですか?

私はこのようなことをしたいのですが、うまくいきません:

${var1 == 0 ? 'hi' : 'hello ' + var2}

'hello'Doubleにキャストしようとして例外をスローします

74
Kyle

+演算子は、jsp elで常に数値の加算を意味します。文字列の連結を行うには、${str1}${str2}のような複数の隣接するel式を使用する必要があります。あなたの例を正しく読んだ場合、これは次のように書くことができます:

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}

編集:もう1つの可能性はjstlを使用することです。jstlはより長いですが、var1に依存するテキストがより多い場合はより明確になる可能性があります。

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>

jspバージョンによっては、c:outは必要ない場合があります。

61
Jörn Horstmann

Java文字列連結を使用するとより効果的です。

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}

ここでの利点は、たとえばこれを関数に渡すこともできることです

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
76
Mike Haefele

これは古いトピックであることは知っていますが、この質問に対する答えは過去6か月で変更されており、その変更、IMOに注意することが重要です(Googlingが「el concatenate strings」でこれを見つけたため)。

EL Expression 3.0(2012年8月に承認され、Java EE 7)でリリースされた一般投票)では、質問者が最初に使用した構文のねじれが有効になりました。

${var1 == 0 ? 'hi' : 'hello ' += var2}

+=の代わりに+を使用することに多くの意見の相違がありましたが、それはそうです。これにより、期待どおりに文字列が正しく評価および連結されます。 +=演算子の代わりにcat演算子を使用することもできます。

${var1 == 0 ? 'hi' : 'hello ' cat var2}

これは現在は合法ですが、Webコンテナ(Tomcat、Jetty、GlassFishなど)がJava EE 7 /をサポートする新しいバージョンをリリースするまで使用できないことに注意してください。 EL 3.0。これは、おそらく秋の早い時期に2013年末までに予想されます。

2015-02-19を編集最終的な演算子は、最初に答えた+=ではなく+であったことに注意してください。

35
Nick Williams

すでに述べたすべてのもう1つの選択肢:

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
13
David L.