I can pass a variable from a JSP scriptlet to JSTL but not from JSTL to a JSP scriptlet without an error

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?

50
задан Pritam Banerjee 30 October 2018 в 13:28
поделиться

2 ответа

Скрипты - это необработанная 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}"/>

Если вы посмотрите документацию для , вы увидите, что можете указать область как страница , запрос или сеанс , и по умолчанию это страница .

А еще лучше вообще не использовать скриптлеты: они заставляют младенца Иисуса плакать.

105
ответ дан 7 November 2019 в 10:41
поделиться

@skaffman все уладил. Они живут каждый в своем контексте. Однако я бы не рассматривал использование сценариев как решение. Вы хотели бы избежать их. Если все, что вам нужно, это объединить строки в EL, и вы обнаружили, что оператор + не работает для строк в EL (что правильно), тогда просто выполните:

<c:out value="abc${test}" />

Или если abc должен быть получен из другой переменной с именем ${resp}, затем выполните:

<c:out value="${resp}${test}" />
14
ответ дан 7 November 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: