JSP el String concatenation [duplicate]

to pytanie ma już odpowiedzi tutaj : Jak połączyć łańcuch w EL? (5 odpowiedzi) Zamknięte 5 lat temu .

Jak połączyć struny w EL?

Chcę zrobić coś takiego, ale to nie działa:

${var1 == 0 ? 'hi' : 'hello ' + var2}

Rzuca wyjątek próbujący rzucić 'hello' na Double

 79
Author: BalusC, 2010-07-06

4 answers

Operator + zawsze oznacza dodawanie liczbowe w JSP język wyrażeń. Aby wykonać konkatenację łańcuchów, należy użyć wielu sąsiednich wyrażeń EL, takich jak ${str1}${str2}.

Jeśli dobrze przeczytam twój przykład, to może być napisane jako:

${var1 == 0 ? 'hi' : 'hello '}${var1 == 0 ? '' : var2}

Edytuj

Inną możliwością byłoby użycie JSTL, które jest dłuższe, ale może być jaśniejsze, jeśli jest więcej tekstu, który zależy od var1:

<c:choose>
    <c:when test="${var1 == 0}">hi</c:when>
    <c:otherwise>hello <c:out value="${var2}"/></c:otherwise>
</c:choose>

c:out może nie być potrzebne, w zależności od wersji JSP.

 67
Author: Jörn Horstmann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-04 16:45:12

Używanie Java string concatenation działa lepiej.

#{var1 == 0 ? 'hi' : 'hello'.concat(var2)}

Zaletą jest to, że możesz również przekazać to do funkcji, na przykład

#{myCode:assertFalse(myVar == "foo", "bad myVar value: ".concat(myVar).concat(", should be foo"))}
 80
Author: Mike Haefele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-28 15:45:05

Wiem, że to stary temat, ale odpowiedź na to pytanie zmieniła się w ciągu ostatnich sześciu miesięcy ,i ważne jest, aby zauważyć, że zmiana, IMO (ponieważ znalazłem to przez Googlowanie "el concatenate strings").

W wersji 3.0 (głosowanie publiczne zatwierdzone w sierpniu 2012, wydane wraz z Java EE 7), Zmiana składni, której pytający pierwotnie używał, jest teraz ważna:
${var1 == 0 ? 'hi' : 'hello ' += var2}

Było wiele niezgody na użycie += zamiast +, ale jest jak jest. To będzie poprawnie oceniaj i łącz łańcuchy zgodnie z oczekiwaniami. Możesz również użyć operatora cat zamiast operatora +=:

${var1 == 0 ? 'hi' : 'hello ' cat var2}

Chociaż jest to teraz legalne, pamiętaj, że nie będziesz mógł z niego korzystać aż do kontenera internetowego (Tomcat, Jetty, GlassFish itp.) wydaje nową wersję, która obsługuje Java EE 7 / EL 3.0. Oczekuje się tego na jakiś czas przed końcem 2013 r., być może już jesienią.

Edytowano 2015-02-19, aby zauważyć, że operator końcowy był +=, a nie + jak pierwotnie odpowiedział.

 43
Author: Nick Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-20 03:27:26

Jeszcze jedna alternatywa dla wszystkich, o których już wspomniano:

<c:set var="hellovar2" value="hello ${var2}" />
${var1 == 0 ? 'hi' : hellovar2}
 14
Author: David L.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-18 13:02:12