我可以打破带有条纹布局的jsp foreach循环

时间:2009-11-19 09:29:59

标签: java jsp jstl stripes

假设条纹布局定义中的每个都有以下内容

<c:foreach items="${foo}" var="bar" >
     <s:layout-component name="whatever" />
</c:foreach>

然后当我渲染时,我会做这样的事情

<s:layout-component name="whatever">
    //Do something with bar
</s:layout-component>

在放入布局之前渲染的任何组件,因此bar为null并且失败。有没有办法在解析jsp之前构建整个页面?

1 个答案:

答案 0 :(得分:0)

看到没有任何答案,问题看起来相当微不足道,我认为这里没有很多Stripes用户。所以这是我的两分钱:

这绝对是一个范围问题。 <s:layout-component>无权访问父页面的页面/循环范围。当您在<jsp:include>内执行<c:forEach>时,JSP / JSTL中存在类似的问题。 <jsp:include>包含的代码段中无法访问循环变量。但是在JSP / JSTL中可以通过<jsp:param>传递<jsp:include>来解决。我快速浏览了Stripes文档,发现了<stripes:param>。看看是否有帮助。至少这是一个基于JSP / JSTL的SSCCE来获得这个想法:

main.jsp中

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<% 
    // Just for demo purposes. Do NOT use scriptlets in real work.
    request.setAttribute("items", java.util.Arrays.asList("foo", "bar", "waa"));
%>

<c:forEach items="${items}" var="item">
    <jsp:include page="include.jsp">
        <jsp:param name="item" value="${item}" />
    </jsp:include>
</c:forEach>

include.jsp

${param.item}<br>

输出:

foo
bar
waa