【问题标题】:Passing c:forEach variable to a jsp:include将 c:forEach 变量传递给 jsp:include
【发布时间】:2011-12-09 15:02:39
【问题描述】:

我正在尝试访问在包含中的 JSTL for 循环中设置的一些 JSTL 变量。

例子:

<c:forEach items="${cart.entries}" var="entry">
 <jsp:include page="helper.jsp"></jsp:include>
</c:forEach>

在 helper.jsp 中,我希望能够引用变量“entry”。它一直显示为“空”。我想也许有一种方法可以像使用普通设置变量一样为 forEach 变量添加范围。

有什么想法吗?

【问题讨论】:

    标签: jsp foreach jstl scope jspinclude


    【解决方案1】:

    回答:我最终只需要这样做才能让它工作。

    <c:forEach items="${cart.entries}" var="entry">
    <c:set var="entryFC" value="${entry}" scope="request"></c:set>
     <jsp:include page="helper.jsp"></jsp:include>
    </c:forEach>
    

    然后我在我的包含中引用了 entryFC。一点也不优雅,但它可以工作,所以我想我会继续使用它。

    【讨论】:

    • 我一直在寻找一种更优雅的方式,但最终还是这样做了。顺便说一句,您不需要重命名变量:&lt;c:set var="entry" value="${entry}" scope="request"/&gt; 可以正常工作,并且可能不会那么混乱。
    【解决方案2】:

    我知道现在回答这个问题已经很晚了,但可以帮助那些陷入这种情况并寻找答案的人。

    如果您没有严格限制使用&lt;jsp: include&gt; 标签来包含jsp,我的回答将起作用。相反,您可以使用&lt;%@include file="/WEB-INF/views/path-to-jsp.jsp" %&gt; 在页面中导入另一个jsp,此页面可以使用您的&lt;c:forEach&gt; 标记循环变量。

    例如。

    <c:forEach items="${users}" var="user">
    
        <%@include file="/WEB-INF/views/path-to-jsp.jsp" %> <!-- here ${user} can be use in importing jsp file. -->
    </c:forEach>
    

    这是因为&lt;%@include file="" %&gt; 标签会将命名文件的内容注入到包含该标签的JSP 中,就好像它被复制和粘贴一样。这是在解析包含文件的内容之前完成的,而不是在解析包含 JSP 的同时解析它。这更类似于 C #include 指令,在预处理期间,包含的文件在文件编译之前被“粘贴”到位。包含内容后,它会被评估,所有这些都在相同的上下文中,因此如果内容只是在适当的位置键入,则包含的代码将具有相同的访问和约束。

    然而,&lt;jsp:include page=""/&gt; 标签的行为不同,因为渲染指定页面的结果被注入到包含标签的 JSP 中。这是通过实质上将请求的页面作为单独的呈现请求提交到同一个容器并获取结果而不是文件的内容来完成的。这个请求是在它自己的上下文中完成的,这意味着它不使用与包含标签的页面相同的页面信息。这可能很方便,尤其是如果包含的内容可能有冲突的变量,例如。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2012-02-13
      • 2014-09-05
      • 2011-10-13
      • 2013-12-07
      • 2014-04-30
      • 2014-12-02
      相关资源
      最近更新 更多