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?

Author: Cornish, 2010-08-26

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.

 98
Author: skaffman,
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}" />
 13
Author: BalusC,
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