我试图通过使用记录来制作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;
}
}
这是我试图使其递归但我运行此代码时,它给我堆栈溢出错误。我认为这是无限的时间。
请帮助我在这个项目上需要帮助。
答案 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>";
}