Je voudrais concaténer une chaîne au sein d'un opérateur ternaire en EL (langage d'expression).
Supposons qu'il existe une variable nommée valeur. S'il est vide, je veux utiliser du texte par défaut. Sinon, je dois l'ajouter avec du texte statique.
${(empty value)? "none" : value + " enabled"}
Cependant, cela ne se compilera pas. Quelle serait la bonne façon d'écrire cela? Ou est-ce même possible?
Cette réponse est obsolète. La technologie a évolué. À moins que vous ne travailliez avec des systèmes hérités, voyez réponse de Joel .
Il n'y a pas d'opérateur de concaténation de chaînes dans EL. Si vous n'avez pas besoin de la chaîne concaténée pour passer à une autre opération, placez simplement ces expressions l'une à côté de l'autre:
${value}${(empty value)? 'none' : ' enabled'}
Avec EL 2, vous pouvez effectuer les opérations suivantes:
#{'this'.concat(' is').concat(' a').concat(' test!')}
Si vous êtes déjà sur EL 3.0 (Java EE 7; WildFly, Tomcat 8, GlassFish 4, etc.), vous pouvez utiliser le nouvel opérateur +=
Pour cela:
<c:out value="${empty value ? 'none' : value += ' enabled'}" />
Si vous n'êtes cependant pas encore sur EL 3.0 et que le value
est une véritable instance de Java.lang.String
(Et donc pas par exemple Java.lang.Long
), Alors utilisez EL 2.2 (Java EE 7 ; JBoss AS 6/7, Tomcat 7, GlassFish 3, etc.) capacité d'invoquer des méthodes directes avec des arguments, que vous appliquez ensuite sur String#concat()
:
<c:out value="${empty value ? 'none' : value.concat(' enabled')}" />
Ou si vous n'êtes même pas encore sur EL 2.2, alors utilisez JSTL <c:set>
Pour créer une nouvelle variable EL avec les valeurs concaténées juste en ligne dans valeur:
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
Depuis Expression Language 3.0, il est valide d'utiliser l'opérateur + = pour la concaténation de chaînes.
${(empty value)? "none" : value += " enabled"} // valid as of EL 3.0
Citation spécification EL 3. .
Opérateur de concaténation de chaînes
Évaluer
A += B
- Contraignez A et B en chaîne.
- Renvoie la chaîne concaténée de A et B.
réponse de Mc Dowell a raison. Je veux juste ajouter une amélioration si au cas où vous pourriez avoir besoin de renvoyer la valeur de la variable comme suit:
${ empty variable ? '<variable is empty>' : variable }
1. Le + (opérateur) n'a aucun effet sur celui de l'utilisation de EL. 2. c'est ainsi que
<c:set var="enabled" value="${value} enabled" />
<c:out value="${empty value ? 'none' : enabled}" />
cela vous est-il utile?
cela peut aussi être une bonne idée d'utiliser concat pour le problème EL + MAP + JSON comme dans cet exemple:
# {myMap [''. concat (myid)]. content}