2010-09-03 27 views
52

Me gustaría concatenar una cadena dentro de un operador ternario en EL (Lenguaje de Expresión).Concatenación de cadenas en EL

Supongamos que hay una variable llamada valor. Si está vacío, quiero usar un texto predeterminado. De lo contrario, necesito agregarle texto estático.

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

Esto no se compilará sin embargo. ¿Cuál sería la forma correcta de escribir esto? ¿O esto es posible?

Respuesta

42

Esta respuesta es obsoleto. La tecnología ha avanzado. A menos que esté trabajando con sistemas heredados, vea Joel's answer.


no hay ningún operador de concatenación de cadenas en EL. Si usted no necesita la cadena concatenada a pasar a alguna otra operación, sólo hay que poner estas expresiones al lado del otro:

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

Si ya estás en EL 3.0 (Java EE 7; JBoss, Tomcat 8, GlassFish 4, etc), entonces usted podría utilizar el nuevo operador += para esto:

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

Si eres pero no en EL 3.0 todavía, y el value es una instancia genuina java.lang.String (y por lo tanto no eg java.lang.Long), luego use EL 2.2 (Java EE 7; JBoss AS 6/7, Tomcat 7, GlassFish 3, etc.) capacidad de invocar métodos con argumentos, que luego aplica en String#concat():

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

O si no eres incluso en EL 2.2, sin embargo, a continuación, utilizar JSTL <c:set> para crear una nueva variable EL con los valores concatenados solo inline en el valor:

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

1.El + (operador) no tiene efecto a que en el uso de EL. 2.so esto es cierto, para usar ese

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


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

es útil esta información a usted?

+0

guión cuatro espacios para bloques de código y utilizar el carácter de acento grave para escapar ángulo entre paréntesis. http://stackoverflow.com/editing-help – McDowell

+5

¿La misma solución que BalusC, pero un día después? Hmm ... – neizan

91

Con EL 2 se puede hacer lo siguiente:

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

'$ {'this'.concat (' es '). Concat (' a '). Concat (' ¡prueba! ')}' Sería la forma normal. –

+0

Funciona con tipos que no sean cadenas, p. Ej. '$ {'I am'.concat (' number ') .concat (1) .concat ('! ')}'? –

+1

@MartinCarney concat() solo admite argumentos de cadena –

11

Desde lenguaje de expresión 3.0, es válido utilizar + = operador de concatenación de cadenas.

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

Citando EL 3.0 Specification.

Concatenación de cadenas Operador

Para evaluar

A += B 
  • Coerce A y B a la cadena.
  • Devuelve la cadena concatenada de A y B.
1

Mc Dowell's answer tiene razón. Sólo quiero añadir una mejora si en caso de que tenga que devolver el valor de la variable como:

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

también puede ser una gran idea para un uso concat para el problema de EL + Mapa + JSON como en este ejemplo:

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

Cuestiones relacionadas