0

我正在尝试通过使用记录来制作 ul li 嵌套树。记录来自数据库表。这是我的桌子的快照。 在此处输入图像描述

我正在尝试在 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;
    }

}

这就是我试图让它递归的,但是当我运行这段代码时,它给了我堆栈溢出错误。我认为它的运行时间是无限的。

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

4

2 回答 2

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>";
    }
于 2013-09-23T18:39:04.547 回答
0

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

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

 %>

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

于 2013-09-23T18:34:15.240 回答