JSP/Struts2/Hibernate:通过自引用表循环

JSP/Struts2/Hibernate:通过自引用表循环,hibernate,jsp,struts2,self-reference,Hibernate,Jsp,Struts2,Self Reference,假设我们有一个名为PERSON的自引用表,它有以下列:ID,PARENT,其中PARENT是PERSON表中另一个元素的ID列的外键。当然,许多人可以有相同的父母 我在惰性抓取模式下使用Hibernate3来处理数据库。Hibernate从数据库中获取person元素,然后通过Struts2操作将其放入ValueStack中,用于结果JSP页面 现在的问题是:在JSP中,如何显示所有子元素和子元素的子元素,以此类推,就像这个person元素的族谱一样 当然,对于n+1个孩子,我可以在person

假设我们有一个名为PERSON的自引用表,它有以下列:ID,PARENT,其中PARENT是PERSON表中另一个元素的ID列的外键。当然,许多人可以有相同的父母

我在惰性抓取模式下使用Hibernate3来处理数据库。Hibernate从数据库中获取person元素,然后通过Struts2操作将其放入ValueStack中,用于结果JSP页面

现在的问题是:在JSP中,如何显示所有子元素和子元素的子元素,以此类推,就像这个person元素的族谱一样

当然,对于n+1个孩子,我可以在person.person上使用标记。我还可以在person.person.person上嵌套另一个标记,以获得n+2个子项

但是如果我想以一种自动化的方式,直到最后一个n+p子元素,在这个过程中显示所有n+1..n+p元素的所有子元素,该怎么办

我希望我已经说得够清楚了。谢谢大家抽出时间


-TBW。

使用JSTL和自定义标记文件,您可以非常轻松地完成这项工作。其思想是标记是递归的。请注意,WebLogic 11g的一些早期版本有一个bug,它阻止递归标记正常工作,但通常servlet容器和应用程序服务器都很好地支持这个bug

person.tag

我刚刚从内存中编写了这个示例,它可能需要一些细微的调整


由于您是惰性加载,您可能希望使用视图中的Open Session模式,因为四元数提到Spring不是必需的。

查看视图中的Open Session。我看过struts2关于这个的文档。一些解决方案可能要求使用Spring。谢谢!这工作做得很好!在您的示例中,只需将${person.children}更改为${value.children},一切正常。再次谢谢你,接得好!我修正了这个例子。
<%@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>