webentwicklung-frage-antwort-db.com.de

JSP EL String-Verkettung

Wie verkette ich Zeichenfolgen in EL?

Ich möchte so etwas machen, aber es funktioniert nicht:

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

Es wird eine Ausnahme ausgelöst, die versucht, 'hello' zu einem Double

74
Kyle

Der Operator + Bedeutet immer numerische Addition 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 lese, könnte dies so geschrieben werden:

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

Edit: Eine andere Möglichkeit wäre, jstl zu verwenden, was länger ist, aber klarer sein könnte, wenn es mehr Text gibt, der von var1 Abhängt:

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

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

61
Jörn Horstmann

Die Verwendung von Java String-Verkettung funktioniert besser.

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

Der Vorteil hierbei ist, dass Sie dies beispielsweise auch in eine Funktion übertragen können

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

Ich weiß, dass dies ein altes Thema ist, aber die Antwort auf diese Frage hat sich in den letzten sechs Monaten geändert, und es ist wichtig, diese Änderung festzustellen, IMO (da ich dies durch Googeln von "el concatenate strings" gefunden habe).

Ab EL Expression 3.0 (öffentliche Abstimmung genehmigt im August 2012, veröffentlicht mit Java EE 7)) ist eine Änderung der Syntax, die der ursprünglich verwendete Fragesteller verwendet hat, jetzt gültig:

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

Es gab viele Meinungsverschiedenheiten mit der Verwendung von += Anstelle von +, Aber es ist, was es ist. Dadurch werden die Zeichenfolgen wie erwartet korrekt ausgewertet und verkettet. Sie können auch den Operator cat anstelle des Operators += Verwenden:

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

Beachten Sie, dass dies jetzt legal ist und Sie es erst verwenden können, wenn Ihr Webcontainer (Tomcat, Jetty, GlassFish usw.) eine neue Version veröffentlicht, die Java EE 7/EL 3.0: Dies wird voraussichtlich vor Ende 2013, möglicherweise bereits im Herbst, geschehen.

Bearbeitet am 19.02.2015 um zu beachten, dass der endgültige Operator += Und nicht + War, wie ursprünglich beantwortet.

35
Nick Williams

Eine weitere Alternative zu allem, was bereits erwähnt wurde:

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