JSP el String concatenation [duplicate]
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
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.
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"))}
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ł.
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}
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