Search code examples
jspjstlelstring-concatenation

How to concatenate a String in EL?


How do I get the promoPrice variable to print as part of the string ONLY $4.67?

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

Solution

  • If you're already on EL 3.0 (Java EE 7; WildFly, Tomcat 8+, GlassFish 4+, Payara, WAS 9+, etc), then you could use the new += operator for this:

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

    If you're however not on EL 3.0 yet, then use EL 2.2 (Java EE 6; JBoss AS 6/7, Tomcat 7, GlassFish 3, WAS 8, etc) capability of invoking direct methods with arguments, which you then apply on String#concat():

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

    Or if you're even not on EL 2.2 yet (Java EE 5 or older; JBoss AS 5- Tomcat 6-, WAS 7-, etc), then use JSTL <c:set> to create a new EL variable with the concatenated values just inlined in value:

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

    In your particular case, another way is to split the expression in two parts:

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

    If ${promoPrice} is null or empty, it won't be printed anyway.