wake-up-neo.net

String-Verkettung in EL

Ich möchte einen String in einem ternären Operator in EL (Expression Language) verketten.

Angenommen, es gibt eine Variable mit dem Namen value. Wenn es leer ist, möchte ich einen Standardtext verwenden. Ansonsten muss ich statischen Text anhängen.

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

Dies wird jedoch nicht kompiliert. Was wäre ein richtiger Weg, dies zu schreiben? Oder ist das überhaupt möglich?

54
Tom Tucker

Diese Antwort ist veraltet. Die Technologie hat sich weiterentwickelt. Wenn Sie nicht mit Legacy-Systemen arbeiten, lesen Sie Joels Antwort .


In EL gibt es keinen Operator für die Verkettung von Zeichenfolgen. Wenn Sie die verkettete Zeichenfolge nicht für eine andere Operation benötigen, setzen Sie einfach die folgenden Ausdrücke nebeneinander:

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

Mit EL 2 können Sie Folgendes tun:

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

Wenn Sie bereits mit EL 3.0 arbeiten (Java EE 7, WildFly, Tomcat 8, GlassFish 4 usw.), können Sie hierfür den neuen Operator += Verwenden:

<c:out value="${empty value ? 'none' : value += ' enabled'}" />

Wenn Sie jedoch noch nicht auf EL 3.0 sind und die value eine echte Java.lang.String - Instanz ist (und somit nicht zB Java.lang.Long), Verwenden Sie EL 2.2 (Java EE 7) ; JBoss AS 6/7, Tomcat 7, GlassFish 3 usw.) Möglichkeit, direkte Methoden mit Argumenten aufzurufen, die Sie dann auf String#concat() anwenden:

<c:out value="${empty value ? 'none' : value.concat(' enabled')}" />

Oder wenn Sie noch nicht einmal mit EL 2.2 arbeiten, erstellen Sie mit JSTL <c:set> Eine neue EL-Variable mit den verketteten Werten, die nur in value angegeben sind:

<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
40
BalusC

Seit Expression Language 3.0 kann der Operator + = für die Verkettung von Zeichenfolgen verwendet werden.

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

Zitieren EL 3.0 Spezifikation .

String-Verkettungsoperator

Zu bewerten

A += B 
  • Zwinge A und B zu String.
  • Gibt die verkettete Zeichenfolge von A und B zurück.
12
Aniket Kulkarni

Mc Dowells Antwort ist richtig. Ich möchte nur eine Verbesserung hinzufügen, falls Sie den Wert der Variablen zurückgeben müssen als:

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

1. Der Operator + hat keine Auswirkung auf die Verwendung von EL. 2.so ist dies der Weg, um das zu nutzen

<c:set var="enabled" value="${value} enabled" />


<c:out value="${empty value ? 'none' : enabled}" />

ist das hilfreich für dich

es kann auch eine großartige Idee sein, concat für das EL + MAP + JSON-Problem zu verwenden, wie in diesem Beispiel:

# {myMap [''. concat (myid)]. content}

0