0

JSFプライムフェイスと休止状態のストレージを備えたEJBマネージドBeanを使用するプロジェクトがあります。 http://www.primefaces.org/showcase/ui/treeAjax.jsf

質問:メモリ不足またはスタックオーバーフローエラーが発生し続けますが、再帰に問題がありますか?

@ManagedBean(name = "categoryController")
@RequestScoped
public class CategoryController implements Serializable {
    ...

    @EJB
    private CategoryFacade ejbFacade;
    private TreeNode root;

    public TreeNode getRoot() {
        return root;
    }

    @PostConstruct
    public void init() {
        root = new DefaultTreeNode("Root", null);
        System.out.print("Facade value=" + getFacade());
        Category categoryRoot = getFacade().find(new Integer(1));
        getSubcategories(categoryRoot, root);

    }

    private void getSubcategories(Category categoryRoot, TreeNode root) {
        List<Category> list = getFacade().findByNamedQuery("Category.findByPCatid", "pcatid", categoryRoot);
        Iterator<Category> it = list.iterator();
        while (it.hasNext()) {
            Category subcategory = it.next();
            TreeNode nextNode = new DefaultTreeNode(subcategory.getUcatid(), root);
            getSubcategories(subcategory, nextNode);

        }

    }

    ...
}
4

1 に答える 1

0

問題は、再帰がルート要素の無限ループにあることです。これを追加してみてください:

if (!subcategory.getCatid().equals(new Integer(1))) {
     getSubcategories(subcategory, nextNode);
}

また、Primefaces イベント リスナーを検索して、必要に応じてツリーを生成することもできます。 http://www.primefaces.org/showcase/ui/treeEvents.jsf

于 2012-11-07T17:43:57.557 に答える