【问题标题】:Cannot access variable inside the included JSP无法访问包含的 JSP 中的变量
【发布时间】:2011-12-03 00:01:04
【问题描述】:

我在我的应用程序中使用 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 中设置的变量,并且可以在包含的 jsp 中访问?

如果我像在主 jsp 中一样在包含的 jsp 中设置该变量,我可以看到 hPediquestStudy 的值。但是我不想每次包含jsp时都设置它。请帮忙

【问题讨论】:

    标签: spring jsp jstl el


    【解决方案1】:

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

    因为&lt;c:set&gt; 默认将它们存储在页面范围内。


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

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


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

    您需要将&lt;c:set&gt;scope属性设置为request或以上。 (默认)page 范围仅对当前 JSP 公开,而不对任何包含的 JSP 公开。


    注意这一行

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

    不必要${currentStudy} 已经在页面、请求、会话和应用程序范围内扫描变量。由于您显然已经在会话范围内设置了它,因此您无需将其复制到页面范围内。因此,只需删除该行。总而言之,您的前 2 行 &lt;c:set&gt; 应替换为这一行:

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

    然后它会按照您的预期工作。

    另见:

    【讨论】:

    • 这很好用!!谢谢。但是,我用站点网格扩展了相同的概念,但它不起作用。我有模板jsp,它正在装饰main.jsp(包括带有''标签的主jsp)。在这里,我将变量从主 jsp 移动到具有范围请求的模板 jsp。它不工作。所以我在sitemesh模板和主jsp中声明了相同的变量
    • 在同一个问题上需要更多帮助。重新输入评论 - 我用站点网格扩展了相同的概念,但它不起作用。我有用于装饰 main.jsp 的模板 jsp(包括带有 &lt;decorator:body/&gt; 标签的主 jsp)。在这里,我将变量从主 jsp 移动到具有范围请求的模板 jsp。它不工作。所以我在sitemesh模板和主jsp中声明了相同的变量
    猜你喜欢
    • 2016-03-27
    • 2023-04-06
    • 1970-01-01
    • 2018-03-27
    • 2011-09-01
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多