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?
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'}
Mit EL 2 können Sie Folgendes tun:
#{'this'.concat(' is').concat(' a').concat(' test!')}
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}" />
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.
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. 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}