无法访问包含的JSP内的变量

时间:2011-10-07 12:48:01

标签: spring jsp jstl el

我在我的应用程序中使用Spring 2.5。在视图中我有主jsp,其中我包含了另一个jsp。我在主jsp中使用c:set标签声明了一个变量,我无法在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中访问?
  4. 如果我在主jsp中包含jsp中设置该变量,我可以看到hPediquestStudy值的值。但是每次我加入jsp时我都不想设置它。请帮忙

1 个答案:

答案 0 :(得分:12)

  

为什么在主jsp上两个值都相等而在包含jsp中我看不到它的值?

因为<c:set>默认将它们存储在页面范围中。


  

为什么currentStudy在包含的jsp中显示其值?

因为它也可用作会话属性。


  

是否有任何解决方案可以帮助我访问父jsp中的变量集,可以在包含的jsps中访问?

您需要将scope的{​​{1}}属性设置为<c:set>或更高。 (默认)request范围仅向当前JSP公开,而不是任何包含的JSP。


注意该行

page

不必要<c:set var="currentStudy" value='<%=(String)session.getAttribute("currentStudy")%>'/> 已经扫描了页面,请求,会话和应用程序范围中的变量。由于您显然已将其设置在会话范围内,因此无需将其复制到页面范围中。所以,只需删除该行。总而言之,您的前2行${currentStudy}行应该替换为这一行:

<c:set>

然后它会以你想要的方式工作。

另见: