The following code causes an error:
<c:set var="test" value="test1"/>
<%
String resp = "abc";
resp = resp + test;
pageContext.setAttribute("resp", resp);
%>
<c:out value="${resp}"/>
The error says
"error a line 4: unknown symbol 'test'".
How do I pass test
from the JSTL code to the JSP scriptlet?
Скрипты - это необработанная Java, встроенная в код страницы, и если вы объявляете переменные в своих скриптах, они становятся локальными переменными, встроенными в страницу.
Напротив, JSTL полностью работает с атрибутами с заданной областью действия либо на странице
, запросе
или сеансе
). Вам нужно переделать свой скриптлет, чтобы выловить test
как атрибут:
<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}"/>
Если вы посмотрите документацию для
, вы увидите, что можете указать область
как страница
, запрос
или сеанс
, и по умолчанию это страница
.
А еще лучше вообще не использовать скриптлеты: они заставляют младенца Иисуса плакать.
@skaffman все уладил. Они живут каждый в своем контексте. Однако я бы не рассматривал использование сценариев как решение. Вы хотели бы избежать их. Если все, что вам нужно, это объединить строки в EL, и вы обнаружили, что оператор +
не работает для строк в EL (что правильно), тогда просто выполните:
<c:out value="abc${test}" />
Или если abc
должен быть получен из другой переменной с именем ${resp}
, затем выполните:
<c:out value="${resp}${test}" />