使用doBody将变量从自定义JSP标记传递回父JSP
我正在处理一个处理分层Bean的自定义标记。bean的外观如下所示:使用doBody将变量从自定义JSP标记传递回父JSP,jsp,jstl,jsp-tags,Jsp,Jstl,Jsp Tags,我正在处理一个处理分层Bean的自定义标记。bean的外观如下所示: public class HierarchyBean { public List<HierarchyBean> children; public List<SomeOtherBean> someListOfBeans; // getters/setters for Bean } <%@ tag body-content="scriptless" %> <%@
public class HierarchyBean {
public List<HierarchyBean> children;
public List<SomeOtherBean> someListOfBeans;
// getters/setters for Bean
}
<%@ 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>
公共类层次结构bean{
公开儿童名单;
公开列出一些bean列表;
//Bean的getter/setter
}
现在,我想制作一个标记,这样我就可以在JSP中完成这项工作:
<ul>
<cust:hierarchy hierarchyBean="${root}">
<li>${subBean}</li>
</cust:hierarchy>
</ul>
- ${subBean}
自定义标记的外观如下所示:
public class HierarchyBean {
public List<HierarchyBean> children;
public List<SomeOtherBean> someListOfBeans;
// getters/setters for Bean
}
<%@ 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>
- ${subBean}
因此,首先,让我来解释一下上面的代码中是否有草率的错误……我的实际项目非常复杂,我试图手动键入一个更简单的示例
第二,我想指出标记的递归性质是有效的。不起作用的是“subBean”的设置。我尝试了使用c:set和不使用c:set,但在我调用的JSP代码中,子bean似乎没有从标记中带回到标记内的主体
我确实知道jsp:doBody有一些属性,即var和varReader,但这两个属性似乎都不是我所需要的
这可能吗?如果可能,我在这里做错了什么使它无法工作?您应该在标签中添加以下内容:
<%@ variable name-given="subBean" scope="NESTED" %>
这将导致容器在页面中保存subBean属性的值(如果有的话),然后调用标记并使标记定义的subBean变量可用于标记体,然后恢复subBean属性的保存值
更多细节。你太棒了!谢谢你给我指出了正确的位置。