Как объединить строки в EL?
Я хочу сделать что-то вроде этого, но он не работает:
${var1 == 0 ? 'hi' : 'hello ' + var2}
Он выдает исключение, пытающееся применить 'hello'
к Double
Как объединить строки в EL?
Я хочу сделать что-то вроде этого, но он не работает:
${var1 == 0 ? 'hi' : 'hello ' + var2}
Он выдает исключение, пытающееся применить 'hello'
к Double
Оператор +
всегда означает численное сложение в jsp el. Чтобы выполнить конкатенацию строк, вам придется использовать несколько соседних el-выражений, например ${str1}${str2}
. Если я правильно прочитал ваш пример, это можно было бы написать как:
${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}
Изменить:. Еще одна возможность - использовать jstl, который длиннее, но может быть более ясным, если в тексте больше текста, который зависит от var1
:
<c:choose>
<c:when test="${var1 == 0}">hi</c:when>
<c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>
c:out
может не понадобиться, в зависимости от версии jsp.
Использование конкатенации строки java работает лучше.
#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}
Преимущество здесь в том, что вы также можете передать это в функцию, например
#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
Я знаю, что это старая тема, но ответ на этот вопрос изменился за последние шесть месяцев, и важно отметить, что изменения, IMO (так как я нашел это в Googling "el concatenate strings" ).
Как и в случае с EL Expression 3.0 (открытый бюллетень, одобренный августом 2012 года, выпущенный с Java EE 7), скручивается синтаксис, который первоначально использовал вопросник:
${var1 == 0 ? 'hi' : 'hello ' += var2}
Было много разногласий с использованием +=
вместо +
, но это то, что есть. Это будет правильно оценивать и конкатенировать строки, как ожидалось. Вы также можете использовать оператор cat
вместо оператора +=
:
${var1 == 0 ? 'hi' : 'hello ' cat var2}
Пока это законно, обратите внимание, что вы не сможете использовать его, пока ваш веб-контейнер (Tomcat, Jetty, GlassFish и т.д.) не выпустит новую версию, поддерживающую Java EE 7/EL 3.0. Это ожидается когда-то до конца 2013 года, возможно, уже в начале осени.
Отредактировано 2015-02-19, чтобы отметить, что конечный оператор был +=
, а не +
, как первоначально ответили.
Еще одна альтернатива всему, что уже упоминалось:
<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}