Mogę przekazać zmienną ze skryptu JSP do JSTL, ale nie z JSTL do skryptu JSP bez błędu
Poniższy kod powoduje błąd:
1. <c:set var="test" value="test1"/>
2. <%
3. String resp = "abc";
4. resp = resp + test;
5. pageContext.setAttribute("resp", resp);
6. %>
7. <c:out value="${resp}"/>
Błąd mówi
"error a line 4: unknown symbol 'test'".
Jak przekazać test
z kodu JSTL do skryptu JSP?
2 answers
Skrypty są surową Javą osadzoną w kodzie strony, a jeśli zadeklarujesz zmienne w swoich skryptach, stają się zmiennymi lokalnymi osadzonymi na stronie.
Natomiast JSTL działa w całości z atrybutami scoped, albo w page
, request
lub session
zakres. Musisz przerobić skrypt, aby wyłowić test
jako atrybut:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
String test = pageContext.getAttribute("test");
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
Jeśli spojrzysz na dokumenty dla <c:set>
, zobaczysz, że możesz określić scope
jako page
, request
lub session
, a domyślnie page
.
Better nie używaj jednak skryptów: sprawiają, że Dzieciątko Jezus płacze.
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
2010-08-25 21:18:42
@ Skaffman Każdy z nich żyje w swoim własnym kontekście. Jednak nie rozważałbym używania skryptów jako rozwiązania . Chciałbyś ich unikać. Jeśli chcesz połączyć łańcuchy w EL i odkryłeś, że operator +
nie działa dla łańcuchów w EL( co jest poprawne), po prostu zrób:
<c:out value="abc${test}" />
Lub jeśli {[3] } ma zostać uzyskana z innej zmiennej o nazwie ${resp}
, to wykonaj:
<c:out value="${resp}${test}" />
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
2017-05-23 12:10:38