1

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

我在延迟获取模式下使用 Hibernate 3 来处理数据库。Hibernate 从数据库中获取一个person元素,然后通过 Struts2 操作将其放入 ValueStack 中,以在结果 JSP 页面上使用。

现在的问题是:在JSP 中,我怎样才能显示这个person元素的所有child(以及child 的child,等等,像家谱一样) ?

当然,对于 n+1 个孩子,我可以在 person.person 上使用 <s:iterator> 标签。我还可以在 person.person.person 上嵌套另一个 < s:iterator> 标签来获得 n+2 个孩子。

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

我希望我已经足够清楚了。谢谢大家的时间。

——待定。

4

1 回答 1

0

您可以使用 JSTL 和自定义标记文件轻松完成此操作。这个想法是标签是递归的。请注意,WebLogic 11g 的一些早期版本存在一个错误,该错误会阻止递归标记正常工作,但总的来说,servlet 容器和应用服务器很好地支持了这一点。

人物标签

<%@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>

(我只是凭记忆写了这个例子,可能需要稍微调整一下)

因为您是延迟加载,所以您可能希望使用Open Session in View模式,正如 Quaternion 所提到的(不需要 Spring)。

于 2011-01-08T02:50:29.387 回答