使用doBody从Custom JSP Tag将变量传递回父JSP

时间:2012-12-03 20:00:08

标签: jsp jstl jsp-tags

我正在处理一个处理分层Bean的自定义标记。 bean看起来像这样:

public class HierarchyBean {
    public List<HierarchyBean> children;
    public List<SomeOtherBean> someListOfBeans;
    // getters/setters for Bean
}

现在我想制作一个标签,以便我可以在我的JSP中执行此操作:

<ul>
<cust:hierarchy hierarchyBean="${root}">
    <li>${subBean}</li>
</cust:hierarchy>
</ul>

自定义标记看起来像这样:

<%@ tag body-content="scriptless" %>

<%@ attribute name="hierarchyBean" required="true" rtexprvalue="true" type="com.publix.webforms3.survey.domain.Element" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"  %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="cust" tagdir="/WEB-INF/tags/hierarchy" %>

<c:forEach items="${someListOfBeans}" var="bean">
    <c:set var="subBean" value="${bean}" scope="page" />
    <jsp:doBody />
</forEach>
<ul>
<c:forEach items="${children}" var="child">
<cust:hierarchy hierarchyBean="${root}">
    <li>${subBean}</li>
</cust:hierarchy>
</c:forEach>
</ul>

所以,首先,让我道歉,如果上面的代码中有错误的错误......我的实际项目非常复杂,我试图手工输入一个更简单的例子。

其次,我想指出标签IS的递归性质。什么是无效的是“subBean”的设置。我尝试使用和不使用c:set,但是在我调用的JSP代码中,似乎subBean没有将标签带回标签内的主体。

我知道jsp:doBody有一些属性,即var和varReader,但它似乎不是正在做我需要的。

这是否可能,如果是这样,我在这做错了什么使它无法正常工作?

1 个答案:

答案 0 :(得分:2)

您应该在标记中添加以下内容:

<%@ variable name-given="subBean" scope="NESTED" %>

这将导致容器在页面中保存subBean属性的值(如果有的话),然后调用您的标记并使标记定义的subBean变量可用于标记的主体,然后恢复保存的值subBean属性。

更多详情here