Jsf Primefaces树堆栈溢出异常

Jsf Primefaces树堆栈溢出异常,jsf,primefaces,tree,Jsf,Primefaces,Tree,我已经使用了标准的递归树代码来填充数据库中的树。但是我得到了这个错误,页面无法打开 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

我已经使用了标准的递归树代码来填充数据库中的树。但是我得到了这个错误,页面无法打开

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)
原因:java.lang.StackOverflower错误
位于org.primefaces.model.TreeNodeChildren.add(TreeNodeChildren.java:40)
位于org.primefaces.model.TreeNodeChildren.add(TreeNodeChildren.java:22)
位于org.primefaces.model.DefaultTreeNode(DefaultTreeNode.java:59)
在com.mesutemre.kitapislemleri.kitaListeTreebean.createTree(kitaListeTreebean.java:55)
我在manegedbean中使用了这些代码

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;
}
private static final long serialVersionUID=1L;
@EJB
私人厨房服务;
树根;
特雷诺德·亚扎拉德;
私有静态列表entityList=new ArrayList();
私有静态列表AragentityList;
私人Kitaplar kitap;
私有列表子实体列表;
公共KitaListeTreebean(){
root=新的DefaultTreeNode(“root”,null);
yazarAd=新的DefaultTreeNode(“,根);
}
@施工后
公共无效初始化(){
entityList=service.findAllKitaplar();
createTree(entityList,10,yazarAd);
}
私有void createTree(列表列表、int-id、TreeNode节点){
subEntitylist=subKitaplar(id);
for(Kitaplar k:子实体列表){
TreeNode childNode=新的DefaultTreeNode(k.getKitapad(),节点);
createTree(subEntitylist,k.getKitapID(),childNode);
}
}
公共静态列表子Kitaplar(int i){
ArantityList=新的ArrayList();
for(Kitaplar k:getEntityList()){
if(k.getKitapID()==i){
a实体列表。添加(k);
}
}
返回实体列表;
}
公共静态列表getEntityList(){
返回实体列表;
}
公共静态void setEntityList(列表entityList){
KitaListTreebean.entityList=entityList;
}
公共树节点getRoot(){
返回根;
}
public void setRoot(TreeNode root){
this.root=根;
}
}


为了获取数据,我使用了JPA。为什么会出现此错误?是关于服务器设置还是我的代码?

为了解决递归永无止境问题,您应该装入新变量,如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;
    }
}
公共类应用程序{
公共静态列表;
公共静态void main(字符串[]args){
dummy=新的ArrayList();
添加(新Kitaplar(10,11));
添加(新Kitaplar(11,12));
添加(新Kitaplar(12,13));
createTree(10);
}
公共静态void createTree(int-childID){
List subEntitylist=subKitaplar(childID);
for(Kitaplar k:子实体列表){
createTree(k.getChildID());
}
}
公共静态列表子Kitaplar(int i){
List AragentityList=新建ArrayList();
用于(Kitaplar k:虚拟){
if(k.getKitapID()==i){
a实体列表。添加(k);
}
}
返回实体列表;
}
}

谢谢。现在作者和书名一个接一个提交。我想展示一位作者和他的书