0

レコードを使用して ul li ネストされたツリーを作成しようとしています。レコードは DB テーブルから取得されます。これが私のテーブルのスナップショットです。 ここに画像の説明を入力

そして、これらのレコードを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

あなたの再帰関数は決して終わらないと思います。

再帰呼び出しごとに、要素を 1 つ減らしてリストを渡すようにしてください。

リスト newList = category.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 に答える