我正在处理一个处理分层 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,但似乎两者都没有做我需要的。
这是否可能,如果是这样,我在这里做错了什么导致它不起作用?