2010-09-03 30 views
52

Vorrei concatenare una stringa all'interno di un operatore ternario in EL (Expression Language).Concatenazione di stringhe in EL

Supponiamo che esista una variabile denominata valore. Se è vuoto, voglio usare del testo predefinito. Altrimenti, ho bisogno di aggiungerlo con del testo statico.

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

Tuttavia, questo non verrà compilato. Quale sarebbe un modo corretto per scrivere questo? O è anche possibile?

risposta

42

Questa risposta è obsoleto. La tecnologia è andata avanti. A meno che non si stia lavorando con i sistemi legacy, vedere Joel's answer.


Nessun operatore di concatenazione di stringhe in EL. Se non è necessario lo stringa concatenata a passare in qualche altra operazione, basta mettere queste espressioni uno accanto all'altro:

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

Se sei già su EL 3.0 (Java EE 7; wildfly, Tomcat 8, GlassFish 4, ecc), allora si potrebbe utilizzare il nuovo += dell'operatore per questo:

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

Se sei tuttavia non ancora su EL 3.0 e value è un'istanza originale java.lang.String (e quindi non ad esempio java.lang.Long), quindi utilizzare la funzione EL 2.2 (Java EE 7; JBoss AS 6/7, Tomcat 7, GlassFish 3, ecc.) di invocazione diretta metodi con argomenti, che vengono quindi applicati su String#concat():

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

Oppure, se non sei nemmeno su EL 2.2 ancora, quindi utilizzare JSTL <c:set> per creare una nuova variabile EL con i valori concatenati solo inline di valore:

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

1. + (operatore) non ha effetto a quello in uso EL. 2.so questo è il modo, di utilizzare tale

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


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

è risultato utile a voi?

+0

trattino quattro spazi per blocchi di codice e utilizzare il carattere di apice inverso per sfuggire parentesi angolari. http://stackoverflow.com/editing-help – McDowell

+5

La stessa identica soluzione di BalusC, ma un giorno dopo? Hmm ... – neizan

91

Con EL 2 è possibile effettuare le seguenti operazioni:

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

'$ {'this'.concat (' is '). Concat (' a '). Concat (' test! ')}' Sarebbe la forma normale. –

+0

Funziona con tipi non stringa, ad es. '$ {'I am'.concat (' number ') .concat (1) .concat ('! ')}'? –

+1

@MartinCarney concat() supporta solo gli argomenti stringa –

11

Dal Expression Language 3.0, è valido per utilizzare + = operatore per la concatenazione di stringhe.

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

Citando EL 3.0 Specification.

String Operatore di concatenazione

Per valutare

A += B 
  • Coerce A e B alla stringa.
  • Restituisce la stringa concatenata di A e B.
1

Mc Dowell's answer ha ragione. Voglio solo aggiungere un miglioramento se nel caso potrebbe essere necessario restituire il valore della variabile come:

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

può anche essere una grande idea utilizzando concat per il problema EL + MAP + JSON come in questo esempio:

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