NumberFormatException PrimeFaces TreeTable

时间:2013-07-03 11:32:12

标签: primefaces collapse treetable

我目前正在使用Primefaces和treetables。除了一个案例,我的treetable工作得很好。让我举一个例子来解释这个问题:

treetable是这样的:

  • Item1.1
    • Item2.1
  • Item1.2
  • Item1.3

一开始,树就会崩溃。 treetable的定义如下:

<p:treeTable id="treetable" value="#{bean.root}" var="node" selectionMode="single" selection="#{bean.selectedNode}">  

我在其中有那些ajax调用:

<p:ajax event="select" listener="#{bean.onSelect}" />

总的来说一切都运转良好。无论节点的级别如何,都会更新所选节点。问题出在这种情况:

(全部已折叠)

  1. 扩展Item1.1
  2. 选择Item2.1
  3. collapse Item1.1
  4. 选择Item1.2
  5. 在这里我得到了例外:

    INFO: java.lang.NumberFormatException: For input string: "0,1"
    java.lang.NumberFormatException: For input string: "0,1"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at org.primefaces.component.api.UITree.findTreeNode(UITree.java:120)
        at org.primefaces.component.api.UITree.findTreeNode(UITree.java:129)
        at org.primefaces.component.api.UITree.setRowKey(UITree.java:80)
        at org.primefaces.component.treetable.TreeTableRenderer.decodeSelection(TreeTableRenderer.java:57)
        at org.primefaces.component.treetable.TreeTableRenderer.decode(TreeTableRenderer.java:40)
        at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
        at org.primefaces.component.api.UITree.processDecodes(UITree.java:180)
        at org.primefaces.component.treetable.TreeTable.processDecodes(TreeTable.java:325)
        at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:506)
        at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
        at org.primefaces.component.api.UITree.visitTree(UITree.java:402)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
        at javax.faces.component.UIForm.visitTree(UIForm.java:371)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
        at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623)
        at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:376)
        at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:252)
        at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
        at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:183)
        at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:931)
        at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    

1 个答案:

答案 0 :(得分:0)

这是 treetable.js there is issue中的PrimeFaces错误。

问题是因为 treetable.js 中的 unselectAllNodes()函数无法清除选择数组变量,但在退出后它应该为空这个功能:

unselectAllNodes: function() {
    var selectedNodes = this.tbody.children('tr.ui-state-highlight');

    for(var i = 0; i < selectedNodes.length; i++) {
        this.unselectNode(selectedNodes.eq(i), true);
    }
}

当展开具有上一个选定行的父行时,不会发生此错误,因为所有可见的选定行(通过 ui-state-highlight 属性搜索)都会从选择中取消选择>数组变量。但是当父行被折叠时,tbody.children *('tr.ui-state-highlight')*返回空列表,选择数组变量具有先前值加上用逗号分隔的新可选值。 / p>

来自PrimeFaces 4.0发布此错误的好消息已修复。因为this commit已经被释放了。一个小差异:选择数组变量已被其他提交重命名为选择

unselectAllNodes: function() {
    var selectedNodes = this.tbody.children('tr.ui-state-highlight');
    for(var i = 0; i < selectedNodes.length; i++) {
        this.unselectNode(selectedNodes.eq(i), true);
    }

    this.selections = [];
    this.writeSelections();
}