假设条纹布局定义中的每个都有以下内容
<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之前构建整个页面?
答案 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