2

POSシステムである学校プロジェクトを開発しています。飲食店を対象としています。「マネージャー」は、好きなだけ深くネストされたカテゴリで構成されるメニューを作成でき、最終カテゴリには項目が含まれます。このカテゴリのツリーは、Java で既に作成されています。これは、基本的にコンピュータのディレクトリと同じです。メニューを表示したいときに、データベースからツリーを作成する予定です。これは Web アプリケーションなので、このツリーを html のネストされたリストとして表す必要があります。私はJSP/JSTLを使用してデータオブジェクトからページを構築してきたので、構築されたらツリーをJSPに渡し、何らかの方法でそれをトラバースして正しいhtmlを挿入するか、Javaでコードを記述して巨大な html 文字列を作成し、それを提供するだけです。

私は jsp/jstl にまったく慣れていないため、これに頭を悩ませており、これを行うための最良の方法に関する提案を探しています。

4

2 に答える 2

2

情報がネストされている深さがわからない場合は、再帰を使用できます。

node.jsp再帰的に呼び出される、と呼ばれるjspページを定義します。

<li>
   ${node.value}
   <c:if test="${fn:length(node.children) gt 0}">
      <ul>
         <c:forEach var="node" items="${node.children}">
           <c:set var="node" value="${node}" scope="request" />
           <jsp:include page="node.jsp" />
         </c:forEach>
      </ul>
   </c:if>
</li>

メインページでは、ツリーのルートでノードを初期化し、を含める必要がありますnode.jsp

于 2013-02-20T07:52:33.533 に答える
1

子をオブジェクトのリストとして再帰的に実装するクラスにツリーが格納されていると仮定すると、JSTL の foreach タグを使用して、次のようにネストされた方法で繰り返すことができます。

<c:forEach items="${root.children}" var="parentItem">    
    <c:forEach items="${parentItem.children}" var="childItem">    
        <c:forEach items="${childItem.children}" var="grandchildItem"> 
        </c:forEach>
    </c:forEach>
</c:forEach>

もちろん、これは、これらのオブジェクトのそれぞれが getChildren() と呼ばれるメソッドを持っていることを前提としています。必要なのは、サーブレットで次のような方法でルート オブジェクトを JSP ページに渡すことだけです。

request.setAttribute("root", root);
于 2013-02-20T00:32:52.050 に答える