2014-10-05 92 views
0

我已经使用标准的递归树代码从DB填充树,但我得到这个错误和页面不打开。Primefaces Tree StackOverFlow异常

Caused by: java.lang.StackOverflowError 
    at org.primefaces.model.TreeNodeChildren.add(TreeNodeChildren.java:40) 
    at org.primefaces.model.TreeNodeChildren.add(TreeNodeChildren.java:22) 
    at org.primefaces.model.DefaultTreeNode.<init>(DefaultTreeNode.java:59) 
    at com.mesutemre.kitapislemleri.KitapListeTreeBean.createTree(KitapListeTreeBean.java:55) 

我在maneged Bean中使用过这些代码;

private static final long serialVersionUID = 1L; 

@EJB 
private KitaplarFacade service; 

TreeNode root; 
TreeNode yazarAd; 
private static List<Kitaplar> entityList = new ArrayList<Kitaplar>(); 
private static List<Kitaplar> araEntitylist; 
private Kitaplar kitap; 
private List<Kitaplar> subEntitylist; 

public KitapListeTreeBean() { 
    root = new DefaultTreeNode("Root", null); 
    yazarAd = new DefaultTreeNode("", root); 
} 

@PostConstruct 
public void initialize() { 
    entityList = service.findAllKitaplar(); 
    createTree(entityList, 10, yazarAd); 
} 

private void createTree(List<Kitaplar> liste, int id, TreeNode node) { 
    subEntitylist = subKitaplar(id); 
    for (Kitaplar k : subEntitylist) { 
     TreeNode childNode = new DefaultTreeNode(k.getKitapad(), node); 
     createTree(subEntitylist, k.getKitapID(), childNode); 
    } 
} 

public static List<Kitaplar> subKitaplar(int i) { 
    araEntitylist = new ArrayList<Kitaplar>(); 
    for (Kitaplar k : getEntityList()) { 
     if (k.getKitapID() == i) { 
      araEntitylist.add(k); 
     } 
    } 
    return araEntitylist; 
} 

public static List<Kitaplar> getEntityList() { 
    return entityList; 
} 

public static void setEntityList(List<Kitaplar> entityList) { 
    KitapListeTreeBean.entityList = entityList; 
} 

public TreeNode getRoot() { 
    return root; 
} 

public void setRoot(TreeNode root) { 
    this.root = root; 
} 

}

为了得到我使用JPA的数据。为什么我得到这个错误?是关于服务器设置还是我的代码?

回答

1

你应该创建新的变量,如childID,以解决递归永无止境。

class Kitaplar { 

    private int kitapID; 
    private int childID; 

    public Kitaplar(int kitapID, int childID){ 
     this.kitapID = kitapID; 
     this.childID = childID; 
    } 

    public int getChildID() { 
     return childID; 
    } 

    public void setChildID(int childID) { 
     this.childID = childID; 
    } 

    public int getKitapID() { 
     return kitapID; 
    } 

    public void setKitapID(int kitapID) { 
     this.kitapID = kitapID; 
    } 

} 

主要类

public class App { 
    public static List<Kitaplar> dummy; 

    public static void main(String[] args) { 
     dummy = new ArrayList<Kitaplar>(); 
     dummy.add(new Kitaplar(10, 11)); 
     dummy.add(new Kitaplar(11, 12)); 
     dummy.add(new Kitaplar(12, 13)); 

     createTree(10); 
    } 

    public static void createTree(int childID) { 
     List<Kitaplar> subEntitylist = subKitaplar(childID); 
     for (Kitaplar k : subEntitylist) { 
      createTree(k.getChildID()); 
     } 
    } 

    public static List<Kitaplar> subKitaplar(int i) { 
     List<Kitaplar> araEntitylist = new ArrayList<Kitaplar>(); 
     for (Kitaplar k : dummy) { 
      if (k.getKitapID() == i) { 
       araEntitylist.add(k); 
      } 
     } 
     return araEntitylist; 
    } 
} 
+0

感谢。现在作者和书名一一呈现。我想展示一位作者及其作品 – emreturka 2014-10-06 09:08:02