Древовидная структура от SQL до HTML UL - PullRequest
1 голос
/ 19 сентября 2011

У меня есть древовидная структура в базе данных.

У меня есть запрос, который возвращает мои записи, отсортированные так, как я хочу, чтобы они отображались.

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 у меня есть объект Branch, который имеет все эти параметры (id, name, parent_id, level).

Я хочу сделать вывод в 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/

Есть предложения, как это сделать?

1 Ответ

1 голос
/ 19 сентября 2011
  • Определите структуру данных Node, которая имеет имя children.
  • Создайте Map<Integer,Node>, где вы можете искать структуру данных по id.
  • Перебирать свой SQL ResulSetпоиск или создание родительского узла для каждой записи и добавление дочернего узла к родительскому.
  • Получите узел корневого уровня и выведите его в строку, используя рекурсию.

Пример грубого кода:

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>");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...