2011-01-07 28 views
1

比方說,我們有一個名爲PERSON的自引用表,其中包含以下列:ID,PARENT,其中PARENT是另一個元素的ID列的外鍵在PERSON表中。當然,很多人可以有同一個父母。JSP/Struts2/Hibernate:通過自引用表循環

我使用Hibernate 3以lazy fetching模式處理數據庫。 Hibernate從數據庫中獲取一個元素,然後通過Struts2操作將其放入ValueStack中,以用於結果JSP頁面。

現在的問題是:在JSP中,我該怎麼辦,以顯示這元素的所有孩子(和孩子的孩子,等等,就像一個家庭樹)?

當然,對於n + 1個孩子,我可以在person.person上使用< s:iterator>標籤。我還可以在person.person.person上嵌套另一個< s:iterator>標籤以獲取n + 2個子項。

但是如果我想以自動方式做到這一點,直到最後一個n + p孩子,在過程中顯示所有n + 1..n + p元素的所有孩子?

我希望我已經夠清楚了。謝謝大家的時間。

- TBW。

+0

調查「開放會議」。我已經看到了這個struts2文檔。一些解決方案可能會決定使用Spring。 – Quaternion 2011-01-07 18:39:37

回答

0

您可以使用JSTL和自定義標記文件輕鬆完成此操作。這個想法是標籤是遞歸的。注意的WebLogic 11g的一些早期版本中出現了會阻止遞歸標籤的正常工作中的錯誤,但總的來說,這是深受servlet容器和應用服務器的支持。

person.tag

<%@attribute name="value" required="true" type="com.example.Person"%> 

<c:forEach items="${value.children}" var="child"> 
    display child info... 
    <z:person value="${child}"/> 
</c:forEach> 

(我只是寫從內存的例子,它可能需要一些輕微的調整)

因爲你懶加載,你可能會想使用打開會話的視圖模式,因爲Quaternion提到(不需要Spring)。

+0

謝謝!這工作完美!你應該在你的例子中將$ {person.children}更改爲$ {value.children},並且一切正常。再次感謝你。 – TBW 2011-01-13 21:45:24