Подтвердить что ты не робот

Конкатенация строк в EL

Я хотел бы конкатенировать строку внутри тернарного оператора в EL (язык выражений).

Предположим, что существует переменная с именем. Если он пуст, я хочу использовать текст по умолчанию. В противном случае мне нужно добавить его с помощью некоторого статического текста.

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

Однако это не скомпилируется. Что было бы правильным способом написать это? Или это возможно?

4b9b3361

Ответ 1

Этот ответ устарел. Технология продвинулась. Если вы не работаете с устаревшими системами, см. Joel answer.


В EL нет оператора конкатенации строк. Если вам не нужна конкатенированная строка для передачи какой-либо другой операции, просто поставьте эти выражения рядом друг с другом:

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

Ответ 2

С помощью EL 2 вы можете сделать следующее:

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

Ответ 3

Если вы уже используете EL 3.0 (Java EE 7, WildFly, Tomcat 8, GlassFish 4 и т.д.), вы можете использовать для этого новый оператор +=:

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

Если вы еще не используете EL 3.0, а value является подлинным экземпляром java.lang.String (и, следовательно, не является, например, java.lang.Long), используйте EL 2.2 (Java EE 7; JBoss AS 6/7, Tomcat 7, GlassFish 3 и т.д.) Возможность вызова прямых методов с аргументами, которые затем применяются к String#concat():

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

Или, если вы еще не находитесь на EL 2.2, используйте JSTL <c:set> для создания новой EL-переменной с конкатенированными значениями, только вложенными в значение:

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

Ответ 4

Начиная с Expression Language 3.0, допустимо использовать оператор + = для конкатенации строк.

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

Цитирование Спецификация EL 3.0.

Оператор конкатенации строк

Оценить

A += B 
  • Привязать A и B к строке.
  • Возвращает конкатенированную строку A и B.

Ответ 5

Ответ Mc Dowell прав. Я просто хочу добавить улучшение, если вам может понадобиться вернуть значение переменной как:

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

Ответ 6

1. + (оператор) не влияет на то, что при использовании EL. 2. так это, чтобы использовать это

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


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

это полезно для вас?

Ответ 7

также может быть отличной идеей, использующей concat для EL + MAP + JSON, как в этом примере:

# {MyMap [ ''. CONCAT (MyID)]. Содержание}