2012-12-03 40 views
1

我正在處理分層Bean的定製標記。豆子看起來是這樣的:將變量從定製JSP標記傳遞迴父JSP使用doBody

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> 

所以,首先,請讓我們分析一下上述代碼中是否存在sl mistakes錯誤...我的實際項目非常複雜,我試圖手動輸入一個更簡單的示例。

其次,我想指出標籤IS工作的遞歸性質。 「subBean」的設置不起作用。我嘗試了使用和不使用c:set,但是在我的調用JSP代碼中,似乎subBean沒有被執行到標籤內的標籤中。

我知道jsp:doBody有一些屬性,即var和varReader,但它似乎並不像我所需要的那樣做。

這是可能的,如果是這樣,我在這裏做錯了什麼使它不起作用?

回答

2

您應該添加以下到您的標籤:

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

這將導致容器保存subBean屬性的值在頁面(如果有的話),然後調用你的標籤,使subBean變量由可用於標籤主體的標籤定義,然後恢復保存的subBean屬性值。

更多詳細信息here

+0

你太棒了!感謝您將我指向正確的位置。 – CodeChimp