Pergunta

Diga que tenho o seguinte para cada um em uma definição de layout de listras

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

Então, quando eu renderizo, faço algo assim

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

O que qualquer componente for renderizado antes de ser colocado no layout, para que a barra seja nula e falha. Existe uma maneira de construir uma página inteira antes que o JSP seja analisado?

Foi útil?

Solução

Vendo a ausência de qualquer resposta e a pergunta parecendo bastante trivial, não acho que haja muitos usuários de listras aqui. Então, aqui estão meus dois centavos:

Este é definitivamente um problema de escopo. a <s:layout-component> Não tem acesso ao escopo da página/loop da página pai. Problema semelhante existe no JSP/JSTL quando você faz um <jsp:include> dentro de a <c:forEach>. A variável de loop é inacessível no trecho de código incluído por <jsp:include>. Mas em JSP/JSTL que poderia ser resolvido passando por um <jsp:param> ao longo de <jsp:include>. Eu dei uma olhada rápida na documentação do Stripes e descobri um <stripes:param>. Veja se isso ajuda. Pelo menos aqui está um JSP/JSTL baseado Sscce Para ter a ideia:

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>

Incluir.jsp

${param.item}<br>

resultado:

foo
bar
waa
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top