0

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

<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 为空并且失败。有没有办法在解析jsp之前构建整个页面?

4

1 回答 1

0

看到没有任何答案并且这个问题看起来相当琐碎,我认为这里没有很多 Stripes 用户。所以这是我的两分钱:

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

主.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>

包含.jsp

${param.item}<br>

输出:

foo
bar
waa
于 2009-11-20T01:45:52.040 回答