2013-09-23 20 views
0

我想通過使用記錄使UL LI嵌套樹。記錄來自數據庫表。這是我桌子的快照。 enter image description here有序列表UL LI從MYSQL java嵌套樹

而我想獲得這些記錄在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; 

     } 

And運算功能

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; 

    } 

和遞歸函數

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員工Cla ss

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; 
    } 

} 

這是我試圖讓它遞歸,但是當我運行這段代碼時,它給了我堆棧溢出錯誤。我認爲這是無限的時間。

請幫助我在這裏需要關於這個項目的幫助。

回答

0

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

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

%> 

這裏,System.out.println(x);在控制檯上顯示結果,而不是在JSP頁面中。使用out.println(x)在JSP頁面中顯示結果。

0

嗯,我認爲你的遞歸函數不會永遠不會結束。

嘗試在每次遞歸調用時通過少一個元素的列表。

List 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>"; 
    } 
+1

夥計們感謝您的幫助。我修改了遞歸條件,現在它正在工作。非常感謝@Aitor。 – user2777070

+0

@ user2777070我很高興聽到這個消息。如果您發現我的答案有用,請注意。如果這是正確的答案,請將其標記爲正確的答案。問候 – Aitor