Как объединить строку в EL? - PullRequest
22 голосов
/ 09 июня 2011

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

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

Ответы [ 5 ]

34 голосов
/ 09 июня 2011

Если вы уже используете 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} равно нулю или пусто, оно все равно не будет напечатано.

3 голосов
/ 09 июня 2011

Прямой путь JSTL

<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>
0 голосов
/ 11 декабря 2017

Простое и надежное решение для конкатенации строк, совместимое с 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, вы можете использовать для этого новый оператор +=.

0 голосов
/ 17 мая 2017

Я сделал что-то вроде этого, где у меня есть переменная 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" />

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

0 голосов
/ 09 июня 2011

Разве это не сработает?

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

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

...