2011-01-07 10 views
1

次の列を持つPERSONという自己参照表があるとします:ID、PARENT、PARENTは別の要素のID列に対する外部キーですPERSONテーブルに追加します。もちろん、多くの人が同じ親を持つことができます。JSP/Struts2/Hibernate:自己参照表をループします

私は、データベースを処理するために、レイジーフェッチモードでHibernate 3を使用します。 Hibernateは要素をデータベースからフェッチし、Struts2アクションによってValueStackに入れ、結果のJSPページで使用します。

ここで質問があります:JSPで、要素のすべての子(およびその子の子など、ファミリツリーのように)を表示するにはどうすればよいですか?

もちろん、n + 1の子供のために、私は<:iterator>タグをperson.personに使用できます。また、別の<:iterator>タグをperson.person.personにネストして、n + 2の子を取得することもできます。

しかし、n + 1..n + pのすべての要素のすべての子プロセスを最後のn + pの子プロセスまで自動で表示したい場合はどうすればよいですか?

私は十分にはっきりしていることを望みます。あなたのお時間をありがとうございました。

- TBW。

+0

「セッションを開いている」を調べます。私はこれについてstruts2のドキュメントを見てきました。ソリューションの中には、Springの使用を指示するものがあります。 – Quaternion

答えて

0

これは、JSTLとカスタムタグファイルを使って簡単に行うことができます。アイデアは、タグが再帰的であるということです。 WebLogic 11gの初期のバージョンでは、再帰タグが正常に動作しないバグがありましたが、一般的にはサーブレットコンテナやアプリサーバーで十分サポートされています。

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> 

(私はメモリからの例を書いて、それは多少の調整が必要になる場合があります)

あなたは遅延ロードしているので、あなたはおそらくしたいと思います表示のオープンセッションを使用してください。クォータニオンが言及されています(春は必要ありません)。

+0

ありがとう!これは完全に機能しました!あなたの例で$ {person.children}を$ {value.children}に変更するだけで、すべてうまく動作します。ありがとうございました。 – TBW

+0

いいキャッチ!私はその例を修正した。 –