2009-11-19 62 views
0

说我对每一个条纹布局定义我可以分解一个jsp foreach循环条纹布局

<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之前构建整个页面?

回答

0

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

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

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 
+0

这是一个很好的刺当然,但这里的问题是,当我调用布局时,该项目还不存在,所以我无法将它作为参数传递。 感谢您的支持。 我打算让这个问题没有特定的条纹,因为它只是一个范围问题,但我想不出一个什么时候可以用jsp:includes做同样的事情。 我怀疑这是不可能的,但如果任何人没有在没有首先评估页面上的表达式的情况下包含jsp的方式,请告诉我们。 – 2009-11-23 12:26:11