2010-09-03 5 views
52

Je souhaite concaténer une chaîne dans un opérateur ternaire dans EL (Expression Language). Supposons qu'il existe une variable nommée value.Concaténation de chaînes dans EL

Si c'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 sera pas compilé. Quelle serait la bonne façon d'écrire cela? Ou est-ce même possible?

Répondre

42

Cette réponse est obsolète. La technologie a évolué. Sauf si vous travaillez avec des systèmes hérités, voir Joel's answer.


Il n'y a pas d'opérateur de concaténation de chaîne dans EL. Si vous n'avez pas besoin de la chaîne concaténée pour passer dans une autre opération, il suffit de mettre ces expressions à côté de l'autre:

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

Si vous êtes déjà sur EL 3.0 (Java EE 7, wildfly, Tomcat 8, GlassFish 4, etc.), vous pouvez alors utiliser le nouvel opérateur += pour cela:

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

Si vous êtes cependant pas sur EL 3.0 encore, et le value est une véritable java.lang.String instance (et donc pas par exemple java.lang.Long), puis utiliser EL 2.2 (Java EE 7, JBoss AS 6/7, Tomcat 7, GlassFish 3, etc) capacité d'invoquer directement méthodes avec 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 sur EL 2.2 encore, utilisez JSTL <c:set> pour créer une nouvelle variable EL avec les valeurs concaténées juste valeur inline:

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

1. + (opérateur) n'a pas d'effet que dans l'utilisation de EL. 2.so c'est la façon, d'utiliser cette

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


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

est-ce utile pour vous?

+0

tiret quatre espaces pour les blocs de code et utiliser le caractère backtick pour échapper à angle-supports. http://stackoverflow.com/editing-help – McDowell

+5

La même solution que BalusC, mais un jour plus tard? Hmm ... – neizan

91

Avec EL 2, vous pouvez effectuer les opérations suivantes:

#{'this'.concat(' is').concat(' a').concat(' test!')} 
+4

'$ {'this'.concat (' est '). Concat (' a '). Concat (' test! ')}' Serait la forme normale. –

+0

Est-ce que cela fonctionne avec des types non-chaîne, par ex. '$ {'Je suis'.concat (' nombre ') .concat (1) .concat ('! ')}'? –

+1

@MartinCarney concat() ne prend en charge que les arguments de chaîne –

11

Depuis Expression Language 3.0, il est valide à utiliser + = opérateur pour la concaténation de chaîne.

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

En citant EL 3.0 Specification.

Concaténation opérateur

Pour évaluer

A += B 
  • Coerce A et B à cordes.
  • Retourne la chaîne concaténée de A et B.
1

Mc Dowell's answer est droite. Je veux juste ajouter une amélioration si au cas où vous devrez peut-être retourner la valeur de la variable:

${ empty variable ? '<variable is empty>' : variable } 
0

il peut aussi être une bonne idée en utilisant concat pour problème EL + MAP + JSON comme dans cet exemple:

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

Questions connexes