2013-07-03 3 views
2

현재 Primefaces와 treetables로 작업 중입니다. 내 treetable 잘 하나의 경우를 제외하고 작동합니다.NumberFormatException PrimeFaces TreeTable

트리 테이블은 다음과 같이입니다 : 내가 문제를 설명하기 위해 약간의 모범을 보자

  • Item1.1
    • Item2.1
  • Item1.2
  • 항목 1 .3

처음에는 트리가 쓰러졌다. 트리 테이블은 다음과 같이 정의된다 :

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

그리고 나는 거기에 그 아약스 호출이 있습니다

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

모든 것은 일반적으로 잘 실행됩니다. 선택된 노드는 노드의 레벨에 관계없이 업데이트됩니다.

  • 붕괴 Item1.1
  • 가 Item1.2에게
  • 을 선택

    1. 가 Item1.1
    2. 가 Item2.1을 선택 연장

      (모두 축소) : 문제는 본 경우와 인

      여기 예외가 있습니다.

      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

    treetable.js, there is issue의 PrimeFaces 버그입니다. 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); 
        } 
    } 
    

    때 부모 행이 이전에 선택한 행이 확장되었습니다. 모든 보이는 선택된 행 (속성에 의해 ux-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

    투표 해 주셔서 감사합니다! –