Я могу передать переменную из сценария JSP в JSTL, но не из JSTL в сценарий JSP без ошибки
Следующий код вызывает ошибку:
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}"/>
Ошибка говорит
"error a line 4: unknown symbol 'test'".
Как передать test
из кода JSTL в сценарий JSP?
Ответы
Ответ 1
Скрипты представляют собой raw java, встроенные в код страницы, и если вы объявляете переменные в своих сценариях, они становятся локальными переменными, встроенными в страницу.
Напротив, JSTL полностью работает с облачными атрибутами, либо в области page
, request
, либо session
. Вам необходимо переделать свой скриптлет, чтобы ловить 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}"/>
Если вы посмотрите на документы для <c:set>
, вы увидите, что вы можете указать scope
как page
, request
или session
, а по умолчанию - page
.
Еще лучше, не используйте скриптлеты вообще: они заставляют ребенка вздыхать.
Ответ 2
@skaffman пригвоздил его. Они живут каждый в своем собственном контексте. Однако я бы не стал рассматривать скрипты как решение. Вы хотите avoid их. Если вы хотите только объединить строки в EL, и вы обнаружили, что оператор +
терпит неудачу для строк в EL (это правильно), просто выполните:
<c:out value="abc${test}" />
Или, если abc
должен быть получен из другой переменной с названием ${resp}
, тогда выполните:
<c:out value="${resp}${test}" />