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
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
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.
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
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"))}
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
Eine weitere Alternative zu, dass alle bereits erwähnt wurde:
<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
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.
Große Antwort, um Zukunft zu sehen! +1 – gavenkoa
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 –
Dexter ist korrekt. Danke für die Klarstellung. Ich werde meine Antwort bearbeiten. –
http://stackoverflow.com/questions/296398/concatenate-strings-in-jsp-el – skaffman
Verwenden Sie einfach 'Hallo'.Concat (var2) –