私はストライプのレイアウトと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>
どのような成分がバーがヌルであり、それが失敗したので、レイアウトに配置される前にレンダリングされます。 JSPが解析される前に、私は、ページ全体を構築することができます方法はありますか?
解決
些細な探して任意の質問回答の有無を見て、私は多くのストライプのユーザーが出てここにあるとは思いません。だからここに私の2セントがあります:
これは間違いなく、スコープの問題です。 <s:layout-component>
は、親ページのページ/ループ範囲にアクセスすることはできません。あなたは<jsp:include>
内部<c:forEach>
を行う場合にも、同様の問題は、JSP / JSTLに存在します。ループ変数は<jsp:include>
によって含まれるコードスニペットにアクセス不能です。しかし<jsp:param>
に沿っ<jsp:include>
を渡すことによって解決することができJSP / JSTLインチ私はストライプのドキュメントで簡単に見て取り、私は <stripes:param>
を発見しましたA>。それは場合に役立ちます参照してください。少なくとも、ここに基づいて、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
所属していません StackOverflow