ti-enxame.com

Concatenação de strings no EL

Gostaria de concatenar uma string dentro de um operador ternário no EL (Expression Language).

Suponha que haja uma variável chamada value. Se estiver vazio, quero usar algum texto padrão. Caso contrário, eu preciso anexá-lo com algum texto estático.

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

Isso não será compilado no entanto. Qual seria a maneira correta de escrever isso? Ou isso é possível?

54
Tom Tucker

Esta resposta é obsoleta. A tecnologia mudou. A menos que você esteja trabalhando com sistemas legados, consulte resposta de Joel .


Não há operador de concatenação de cadeias de caracteres no EL. Se você não precisar que a sequência concatenada passe para outra operação, basta colocar estas expressões próximas uma da outra:

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

Com o EL 2, você pode fazer o seguinte:

#{'this'.concat(' is').concat(' a').concat(' test!')}
99
Joel Richard

Se você já está no EL 3.0 (Java EE 7; WildFly, Tomcat 8, GlassFish 4, etc.), poderá usar o novo operador += para isso:

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

Se você ainda não está no EL 3.0 ainda, e a value é uma instância genuína Java.lang.String (e, portanto, não é, por exemplo, Java.lang.Long), use o EL 2.2 (Java EE 7; JBoss AS 6/7, Tomcat 7, GlassFish 3, etc.) capacidade de chamar métodos diretos com argumentos, que você aplica em String#concat():

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

Ou, se você ainda não está no EL 2.2, use JSTL <c:set> para criar uma nova variável EL com os valores concatenados que estão alinhados no valor:

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

Desde o Expression Language 3.0, é válido usar o operador + = para concatenação de cadeias.

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

Citação Especificação EL 3. .

Operador de concatenação de cadeias

Avaliar

A += B 
  • Coerce A e B para String.
  • Retorne a sequência concatenada de A e B.
12
Aniket Kulkarni

resposta de Mc Dowell está certo. Eu só quero adicionar uma melhoria se você precisar retornar o valor da variável como:

${ empty variable ? '<variable is empty>' : variable }
1
Mohammad Faisal

1.O + (operador) não afeta isso no uso do EL. 2.so é esse o caminho, usar esse

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


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

isto é útil para você?

0

também pode ser uma ótima idéia usar o concat para o problema EL + MAP + JSON, como neste exemplo:

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

0
Benjamin Fuentes