Конкатенация строк в EL
Я хотел бы конкатенировать строку внутри тернарного оператора в EL (язык выражений).
Предположим, что существует переменная с именем. Если он пуст, я хочу использовать текст по умолчанию. В противном случае мне нужно добавить его с помощью некоторого статического текста.
${(empty value)? "none" : value + " enabled"}
Однако это не скомпилируется. Что было бы правильным способом написать это? Или это возможно?
Ответы
Ответ 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)]. Содержание}