Как конкатенировать строку в EL?

Как мне получить переменную promoPrice для печати как часть строки ONLY $4.67?

<c:set var="promoPrice" value="4.67" />
<p>${(promoPrice != null) ? "ONLY $${promoPrice}" : "FREE"}</p>

Ответы

Ответ 1

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

<p>${not empty promoPrice ? 'ONLY $' += promoPrice : 'FREE'}</p>

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

<p>${not empty promoPrice ? 'ONLY $'.concat(promoPrice) : 'FREE'}</p>

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

<c:set var="promoPriceString" value="ONLY $${promoPrice}" />
<p>${not empty promoPrice ? promoPriceString : 'FREE'}</p>

В вашем конкретном случае другим способом является разделение выражения на две части:

<p>${not empty promoPrice ? 'ONLY $' : 'FREE'}${promoPrice}</p>

Если ${promoPrice} является нулевым или пустым, оно все равно не будет напечатано.

Ответ 2

Прямой jstl way

<c:set var="promoPrice" value="4.67" />
<p>
<c:choose>
    <c:when test="${(promoPrice != null)}">
        ONLY $${promoPrice}
    </c:when>
    <c:otherwise>
        FREE
    <c:otherwise>
</c:choose>
</p>

Ответ 3

Простое и надежное решение для конкатенации строк, которое совместимо с EL 2.0+, заключается в использовании промежуточной переменной:

<c:set var="promoPrice" value="4.67" />
<c:set var="priceText" value="ONLY ${promoPrice}" />
<p>${(promoPrice != null) ? priceText : "FREE"}</p>

В соответствии с @BalusC, начиная с EL 2.2, вы можете выполнять конкатенацию с использованием метода String#concat(), и начиная с EL 3.0 вы можете использовать новый оператор += для этого.

Ответ 4

Я сделал что-то вроде этого, где у меня есть переменная mathjaxUrl, и я хочу связать с ней другую строку

<c:set var="mathjaxUrl" value="https://cdnjs.cloudflare.com/ajax/libs/mathjax" />
... some other stuff here
<c:set var="mathjaxUrl" value="${mathjaxUrl}?config=TeX-AMS-MML_HTMLorMML" />

надеюсь, что это поможет вам

Ответ 5

Не будет ли это работать?

<c:set var="promoPrice" value="4.67" />
<p>${(promoPrice != null) ? "ONLY $"${promoPrice} : "FREE"}</p>

Обратите внимание, что ${promoPrice} находится вне кавычек. Это выглядит как простейшее решение.