java - Primefaces TreeTable - 无法实例化类

标签 java jsf primefaces

我试图从我正在解析的属性文件创建一个树表,但我不断收到错误“无法实例化类”,代码如下。我不确定为什么它会抛出这个异常。

for(Map.Entry<Object, Object> prop : props.entrySet()) {
    String key = ((String)prop.getKey()).replace("_", " ");
    String value = (String)prop.getValue();

    String[] parts = key.split("\\.");

    if(parts.length > 4) {
        boolean topLevelExists = false;

        // if there are already child nodes
        if(root.getChildCount() > 0) {
            for(TreeNode n : root.getChildren()) {
                System.out.println("n = "+n);
                System.out.println("n.data = "+((Menu)n.getData()).getName());
                System.out.println("n.getType = "+n.getType());

                if(n.getType().equals(parts[2])) {  
                    System.out.println("they equal");
                    topLevelExists = true;
                    if(topLevelExists == true) {
                        System.out.println("topLevelExists");
                        TreeNode node = new DefaultTreeNode(parts[2], new Menu(parts[2], value), n);
                    }
                } else {
                    TreeNode node = new DefaultTreeNode(parts[2], new Menu(parts[2], value), root);  // FAILS ON THIS LINE WITH THE EXCEPTION BELOW
                }
            }
        // else we are creating the first node
        } else {
            TreeNode node = new DefaultTreeNode(parts[2], new Menu(parts[2], value), root);
        }


    }
}

菜单.java

public class Menu {

    private String name;
    private String path;

    public Menu(String name, String path) {
        this.name = name;
        this.path = path;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPath() {
        return path;
    }
    public void setPath(String path) {
        this.path = path;
    }
}

抛出异常

com.sun.faces.mgbean.ManagedBeanCreationException: Cant instantiate class: edu.mayo.ccs.alliance.menu.backing.MenuBacking.
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)
    at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)
    at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)
    at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)
    at com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)
    at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
    at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:69)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:112)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193)
    at org.primefaces.component.api.UITree.getValue(UITree.java:99)
    at org.primefaces.component.treetable.TreeTableRenderer.encodeTbody(TreeTableRenderer.java:260)
    at org.primefaces.component.treetable.TreeTableRenderer.encodeRegularMarkup(TreeTableRenderer.java:208)
    at org.primefaces.component.treetable.TreeTableRenderer.encodeMarkup(TreeTableRenderer.java:132)
    at org.primefaces.component.treetable.TreeTableRenderer.encodeEnd(TreeTableRenderer.java:88)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1681)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:854)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1674)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
    at org.primefaces.component.accordionpanel.AccordionPanelRenderer.encodeTab(AccordionPanelRenderer.java:218)
    at org.primefaces.component.accordionpanel.AccordionPanelRenderer.encodeTabs(AccordionPanelRenderer.java:147)
    at org.primefaces.component.accordionpanel.AccordionPanelRenderer.encodeMarkup(AccordionPanelRenderer.java:91)
    at org.primefaces.component.accordionpanel.AccordionPanelRenderer.encodeEnd(AccordionPanelRenderer.java:71)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1681)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
    at org.primefaces.component.tabview.TabViewRenderer.encodeTabContent(TabViewRenderer.java:279)
    at org.primefaces.component.tabview.TabViewRenderer.encodeContents(TabViewRenderer.java:237)
    at org.primefaces.component.tabview.TabViewRenderer.encodeMarkup(TabViewRenderer.java:128)
    at org.primefaces.component.tabview.TabViewRenderer.encodeEnd(TabViewRenderer.java:69)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:884)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1681)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at edu.mayo.ccs.alliance.util.BrowserNotSupportedFilter.doFilter(BrowserNotSupportedFilter.java:151)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at edu.mayo.ccs.ctsu.sso.CustomAuthenticator.invoke(CustomAuthenticator.java:42)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
    at java.util.AbstractList$Itr.next(AbstractList.java:343)
    at edu.mayo.ccs.alliance.menu.backing.MenuBacking.parseMenu(MenuBacking.java:151)
    at edu.mayo.ccs.alliance.menu.backing.MenuBacking.<init>(MenuBacking.java:96)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:188)
    ... 64 more

最佳答案

到目前为止,您正在修改 root当你仍在迭代它时。

for (TreeNode n : root.getChildren()) {
    // ...
    TreeNode node = new DefaultTreeNode(parts[2], new Menu(parts[2], value), root);  // FAILS ON THIS LINE WITH THE EXCEPTION BELOW
    // ...
}

new DefaultTreeNode将添加 new Menu作为给定root的 child 。但是,这将导致迭代失败,因为后备集合已同时被修改。这就是ConcurrentModificationException的全部内容。正在试图告诉你。

您需要相应地重写代码,以便new DefaultTreeMode child root当您迭代 root 时,尚未创建。我基本上可以看到两种方法来解决这个问题:重新设计代码,这样你就不需要循环 root根本没有,或者收集一些新的 child ListMap然后将它们添加到 root 。具体的功能需求不太清楚,所以我无法建议哪一个是正确的解决方案。

关于java - Primefaces TreeTable - 无法实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990618/

相关文章:

java - 使用 Processing 在 Android SDK 中编译 build.xml 时出现问题

java - 将二维数组复制到一维数组

jsf - 在p:dataTable的表标题中隐藏分页按钮

primefaces - 通过 PrimeFaces Selector (PFS) 更新 RequestContext

javascript - 如何在模态中显示 primefaces 图表?

java - 如何在java中使用apache SPARK分割和过滤字符串

java - 识别注释时出现 JLex 语法错误

java - 如何移动/重命名上传的文件?

java - 如何在使用 rich 上传文件之前设置 bean 属性 :fileUpload?

java - Facelets 错误页面,因为响应已提交。 JSF