2013-07-03 50 views
2

我目前正在使用Primefaces和treetables。除一例外,我的心脏起搏效果很好。让我来一个小例子来说明这个问题:NumberFormatException PrimeFaces TreeTable

的treetable中是这样的:

  • Item1.1
    • Item2.1
  • Item1.2
  • 项目1 .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. 崩溃Item1.1
  4. 选择Item1.2

在这里,我得到了一个例外:

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) 
+0

'#{bean.selectedNode}'的类型是什么? – user1983983

+0

该类型是一个TreeNode。 –

回答

0

这是PrimeFaces bug中的treetable.js,there is issue

的问题是因为unselectAllNodes()在treetable.js功能不明确选择数组变量,但它应该是空的从该函数退出后:

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')*返回空列表,并且选择数组变量具有以前的值加上以逗号分隔的新的可选值。

从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(); 
} 
+0

谢谢我会投票! –