我在数据库中有一个像树的结构。

我有一个查询,返回的记录只是按照我希望它们显示的方式排序。

SELECT branch_id, branch_name, parent_branch_id, level FROM dw_branches
start WITH parent_branch_id IS NULL
connect BY PRIOR branch_id = parent_branch_id


哪个返回这样的东西

| branch_id | branch_name | parent_branch_id | level|
|         1 | one         |                  |     1|
|         2 | two         |                1 |     2|
|         3 | three       |                1 |     2|
|         4 | four        |                2 |     3|
|         5 | five        |                1 |     2|
|         6 | six         |                5 |     3|


在Java中,我有一个具有所有这些参数(id,name,parent_id,level)的Branch对象。

我想在JSP中做一个输出,最终看起来像这样:

<ul>
    <li>one
        <ul>
            <li>two
                <ul>
                    <li>four</li>
                </ul>
            </li>
            <li>three</li>
            <li>five
                <ul>
                    <li>six</li>
                </ul>
            </li>
        </ul>
    </li>
</ul>


基本上,我想嵌套ul / li以便使用http://bassistance.de/jquery-plugins/jquery-plugin-treeview/显示数据

有什么建议吗?

最佳答案

定义一个名称为子级的Node数据结构。
创建一个Map<Integer,Node>,您可以在其中通过id查找数据结构。
遍历您的SQL ResulSet,查找或创建每个记录的父节点,并将子节点添加到父节点。
获取根级节点,然后使用递归将其输出到String。


粗糙的代码示例:

Node {
  String name;
  List<Node> children = new LinkedList<Node>();

  void appendHTML(StringBuilder toAppendTo) {
    toAppendTo.append("<li>").append(name);
    if (!children.isEmpty()) {
      toAppendTo.append("<ul>");
      for ( Node child : children ) {
        child.appendHTML(toAppendTo);
      }
      toAppendTo.append("</ul>");
    }
    toAppendTo.append("</li>");
  }
}

10-05 23:04
查看更多