2010-07-06 15 views
68

Wie verkette ich Strings in EL?JSP EL String Verkettung

Ich mag so etwas tun, aber es funktioniert nicht:

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

Es löst eine Ausnahme versucht 'hello' zu einem Double

+0

http://stackoverflow.com/questions/296398/concatenate-strings-in-jsp-el – skaffman

+0

Verwenden Sie einfach 'Hallo'.Concat (var2) –

Antwort

59

Der + Operator zu werfen bedeutet immer numerischen Zusatz in jsp el . Um eine String-Verkettung durchzuführen, müssten Sie mehrere benachbarte el-Ausdrücke wie ${str1}${str2} verwenden. Wenn ich Ihr Beispiel richtig lesen konnte dies wie folgt geschrieben werden:

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

Edit: Eine andere Möglichkeit wäre jstl zu verwenden, die länger ist, aber vielleicht klarer, wenn es mehr Text, der auf var1 abhängig ist:

Die c:out wird möglicherweise nicht benötigt, abhängig von der Jsp-Version.

+0

Ich hatte gehofft, ich würde das nicht tun müssen ... wiederhole die Bedingung jedes Mal.Mein Beispiel ist eine Vereinfachung, im realen Szenario müsste ich das Beispiel dreimal wiederholen, wenn ich es möchte :( – Kyle

66

Die Verwendung von Java String-Verkettung funktioniert besser.

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

Der Vorteil hierbei ist, dass Sie dies auch in eine Funktion übergeben können, zum Beispiel

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))} 
+10

Bitte beachten Sie, dass dies nur in der neuen Version 2.2 und nicht in den älteren EL Versionen zwischen 2001 funktioniert und jetzt. – BalusC

11

Eine weitere Alternative zu, dass alle bereits erwähnt wurde:

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

Ich weiß, das ist ein altes Thema, aber die Antwort auf diese Frage hat sich in den letzten sechs Monaten geändert, und es ist wichtig zu beachten, dass Veränderung, IMO (seit ich dies gefunden von Googeln "el verketten Strings").

Ab EL Expression 3.0 (public 2012 genehmigt Abstimmung August mit Java EE 7 freigegeben), einer Variante der Syntax ursprünglich der Fragesteller nun gültig wird verwendet:

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

Es gibt viel Uneinigkeit mit dem Einsatz war von += anstelle von +, aber es ist was es ist. Dies wird die Zeichenfolgen wie erwartet richtig bewerten und verketten. Sie können auch den cat Operator anstelle des += Operator verwenden:

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

Während dies nun legal ist zu beachten, dass Sie nicht in der Lage sein wird, es zu benutzen, bis die Web-Container (Tomcat, Jetty, Glassfish, usw.) veröffentlicht eine neue Version, die Java EE 7/EL 3.0 unterstützt. Dies wird voraussichtlich vor Ende 2013, vielleicht schon im Herbst, erwartet.

Edited 2015.02.19 zu beachten, dass der letzte Betreiber += und nicht + wie ursprünglich beantwortet war.

+3

Große Antwort, um Zukunft zu sehen! +1 – gavenkoa

+3

Leider ist das nicht korrekt.Im letzten Moment zu viel Beschwerde von ziemlich allen änderte sie den Operator von dem vollständig logischen "+" zu dem höchst verwirrenden "+ =". Ich weiß nicht, was diese Leute rauchten: X –

+0

Dexter ist korrekt. Danke für die Klarstellung. Ich werde meine Antwort bearbeiten. –