有序列表来自MYSQL的java中的嵌套树

时间:2013-09-23 18:30:59

标签: java mysql database jsp html-lists

我试图通过使用记录来制作ul li嵌套树。记录来自数据库表。这是我桌子的快照。 enter image description here

我正在尝试在java中获取这些记录并希望在html页面上显示。为此,我使用的是JSP页面。这是我的JSP页面的示例

<ul  id="org" style="display:none">
            <li><a href="#" class="ui-btn ui-shadow ui-btn-corner-all ui-btn-inline ui-btn-hover-e ui-btn-up-e"><span class="ui-btn-inner"><span class="ui-btn-text" style="font-size:10px;">3214657890<br/>Root<br/>SAP<br/>SSE</span></span></a>
                <ul id="main_child_ul" class="children">

              <%
              String x=empTree.Operator();
               System.out.println(x);

               %>



              </ul> 
            </li>
        </ul> 

这是我的JAVA功能

public ResultSet getSavedTree() throws SQLException{
        ResultSet rs = null;
        try {   
             s = ds.createStatement();           

             rs = s.executeQuery("SELECT * FROM pep.employee_tree order by reporting_to;");

        } catch (Exception e) {
            e.printStackTrace();
        }

        return rs;

        }

和操作员功能

public String Operator()
    {
        String x="";
        try {
            ArrayList<EmployeeJSONObj> arraylist = new ArrayList<EmployeeJSONObj>();              

            ResultSet SavedEmployeesTree = getSavedTree();
            while(SavedEmployeesTree.next())
            {
                EmployeeJSONObj emp = new EmployeeJSONObj();
                emp.setName(SavedEmployeesTree.getString("sap_code"));
                emp.setParentId(SavedEmployeesTree.getString("reporting_to"));
                arraylist.add(emp);
            }
            x=recursiveTree(arraylist,"-1");
        }catch (Exception e) {
            e.printStackTrace();
        }
        return x;

    }

AND递归函数

public String recursiveTree(ArrayList<EmployeeJSONObj> categories , String parent)
    {
        String ret = "<ul>";
        String sub ="";

        try {
            //String xx=categories.getString("sap_code");
            for(int i=0;i<categories.size();i++)
            {
                if(categories.get(i).getParentId().equals(parent))
                {
                    ret += "<li><a href=='#'>"+ categories.get(i).getName() +"</a>";
                    sub = recursiveTree(categories,categories.get(i).getParentId());
                    if(sub != "<ul></ul>")
                        ret += sub;
                    ret += "</li>";
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }   

        return ret+"</ul>";
    }

这是我的JAVA员工类

public  class EmployeeJSONObj {
    private String name;
    private String parentID;
    private List<EmployeeJSONObj> children = new LinkedList<>();
    EmployeeJSONObj()
    {

    }
    public void setName(String n)
    {
        name=n ;
    }
    public String getName()
    {
        return name;
    }
    public void setParentId(String pid)
    {
        parentID=pid;
    }
    public String getParentId()
    {
        return parentID;
    }

    public List<EmployeeJSONObj> getChild()
    {
        return children;
    }

    public String toString() {
        return "name: " + name + ", children = " + children;
    }

}

这是我试图使其递归但我运行此代码时,它给我堆栈溢出错误。我认为这是无限的时间。

请帮助我在这个项目上需要帮助。

2 个答案:

答案 0 :(得分:0)

在JSP文件示例中。你用过。

 <%
     String x=empTree.Operator();
     System.out.println(x);

 %>

这里,System.out.println(x);在控制台上显示结果,而不是在JSP页面中。使用out.println(x)在JSP页面中显示结果。

答案 1 :(得分:0)

我认为你的递归函数永远不会结束。

尝试在每次递归调用时使用少一个元素传递列表。

列出newList = categories.subList(0,categories.size()-1);

sub = recursiveTree( newList ,categories.get(i).getParentId());

public String recursiveTree(ArrayList<EmployeeJSONObj> categories , String parent)
    {
        String ret = "<ul>";
        String sub ="";

        try {
            //String xx=categories.getString("sap_code");
            for(int i=0;i<categories.size();i++)
            {
                if(categories.get(i).getParentId().equals(parent))
                {
                    ret += "<li><a href=='#'>"+ categories.get(i).getName() +"</a>";
                    **List newList = categories.subList(0,categories.size() -1);**
                    sub = recursiveTree(**newList** ,categories.get(i).getParentId());
                    if(sub != "<ul></ul>")
                        ret += sub;
                    ret += "</li>";
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }   

        return ret+"</ul>";
    }