Невозможно получить доступ к переменной внутри включенного JSP - PullRequest
1 голос
/ 07 октября 2011

Я использую Spring 2.5 в своем приложении. В представлении у меня есть основной JSP, в который я включил другой JSP. Я объявил переменную, используя тег c: set в основной jsp, к которой у меня нет доступа внутри jsp Ниже код main.jsp

<c:set var="hPediquestStudy"><spring:message code="study.hpediquest.mapping" /></c:set>
<c:set var="currentStudy" value='<%=(String)session.getAttribute("currentStudy")%>'/>
<html>
<head>
</head>
<body>
<c:if test="${currentStudy eq hPediquestStudy}">
  Variables are equal
</c:if>
<c:if test="${currentStudy ne hPediquestStudy}">
  Variables are not equal
</c:if>
<jsp:include page="/WEB-INF/jsp/included.jsp"></jsp:include>
</body
</html>

included.jsp

<c:if test="${currentStudy eq hPediquestStudy}">
   hPediquestStudy Variable is accessible
</c:if>
 <br/>currentStudy : ${currentStudy}
 <br/>hPediquestStudy : ${hPediquestStudy}

Я получаю вывод

Переменные равны

currentStudy: hPediquest

hPediquestStudy:

  1. Почему в основном jsp оба значения равны, а во включенном jsp я не вижу его значения?
  2. Почему currentStudy отображает свое значение внутри включенного jsp?
  3. Есть ли какое-либо решение, которое поможет мне получить доступ к набору переменных в родительском jsp, а во включенном jsps можно получить доступ?

Я вижу значение hPediquestStudy, если установить эту переменную во включенном jsp, как в основном jsp. Но я не хочу устанавливать его каждый раз, когда я включаю JSP. Пожалуйста, помогите

1 Ответ

12 голосов
/ 07 октября 2011

Почему на основном jsp оба значения равны, а во включенном jsp я не вижу его значения?

Поскольку <c:set> по умолчанию сохраняет их на страницеscope.


Почему currentStudy отображает свое значение внутри включенного jsp?

Поскольку он также доступен в качестве атрибута сеанса.


Есть ли какое-либо решение, которое помогает мне получить доступ к набору переменных в родительском jsp, и к нему можно получить доступ во включенном jsps?

Вам необходимо установить атрибут scope для <c:set> в request или выше.Область (по умолчанию) page доступна только для текущего JSP, но не для всех включенных JSP.


Обратите внимание, что строка

<c:set var="currentStudy" value='<%=(String)session.getAttribute("currentStudy")%>'/> 

является ненужной ,${currentStudy} уже будет сканировать переменные в областях страниц, запросов, сеансов и приложений.Поскольку вы, очевидно, уже установили его в области видимости сеанса, вам не нужно копировать его в область видимости страницы.Так что просто удали эту строку.Все вместе, ваши верхние 2 <c:set> строки должны быть заменены этой единственной строкой:

<c:set var="hPediquestStudy" scope="request"><spring:message code="study.hpediquest.mapping" /></c:set>

, и тогда она будет работать так, как вы планировали.

См. Также:

...