2017-02-01 15 views
2

У меня есть записи, такие как список объектов списка, и которые должны отображаться как вложенные datatables. Поэтому решили использовать datatable внутри datagrid/datalist/uirepeat/p: повторять и сортировать для данных datatables. Вот приведенный ниже код. Он способен отображать отлично, но после сортировки по более чем 1 генерируемым данным и удалению submit, при рендеринге на ту же страницу приложение бросает NullpointerException в primefaces datatable findcolumngroup. Это происходит только в том случае, если мы сортируем по нескольким генерируемым datatables. Если сортировка выполняется только для 1 создаваемой сгенерированной и нажатой кнопки отправки, проблема не возникает. Также, если сортировка не применяется, то она отлично работает без каких-либо исключений. Область боба - viewcope. Я также установил rowStatePreserved = true, после добавления этой сортировки не работал.Основные интерфейсы Вложенные данные, которые выбрасывают исключение нулевого указателя после сортировки по ним и отправляют и отображают на ту же страницу

<p:dataGrid var="cardslist" value="#{bean.cardslist}"> 
    <h:panelGrid columns="1" border="0"> 
    <p:column> 
     <p:dataTable value="#{cardslist.businesslist}" 
     var="card"> 
     <p:column headerText="businessname" sortBy="#{card.business.name}"> 
      <h:outputText value="#{card.business.name}" /> 
     </p:column> 
     </p:dataTable> 
    </p:column> 
    </h:panelGrid> 
</p:dataGrid> 

<p:commandButton value="submit" style="width:auto;" 
        action="#{bean.submit}" 
        update=":testform" /> 

Исключение брошено:

[1/02/17 7:45:28:801 CET] 0000009f FaceletViewDe E Error Rendering View[/cbhCardsOverview.xhtml] 
           java.lang.NullPointerException 
    at org.primefaces.component.datatable.DataTable.findColumnInGroup(DataTable.java:909) 
    at org.primefaces.component.datatable.DataTable.findColumn(DataTable.java:900) 
    at org.primefaces.component.datatable.DataTable.getSortColumn(DataTable.java:1444) 
    at org.primefaces.component.datatable.feature.SortFeature.singleSort(SortFeature.java:136) 
    at org.primefaces.component.datatable.DataTableRenderer.preRender(DataTableRenderer.java:109) 
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:83) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:579) 
    at javax.faces.component.UIData.encodeEnd(UIData.java:869) 
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89) 
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72) 
    at org.primefaces.component.column.ColumnRenderer.encodeEnd(ColumnRenderer.java:54) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:579) 
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:543) 
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:315) 
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:150) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:579) 
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89) 
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72) 
    at org.primefaces.component.datagrid.DataGridRenderer.encodeTable(DataGridRenderer.java:203) 
    at org.primefaces.component.datagrid.DataGridRenderer.encodeContent(DataGridRenderer.java:130) 
    at org.primefaces.component.datagrid.DataGridRenderer.encodeMarkup(DataGridRenderer.java:112) 
    at org.primefaces.component.datagrid.DataGridRenderer.encodeEnd(DataGridRenderer.java:49) 
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:579) 
    at javax.faces.component.UIData.encodeEnd(UIData.java:869) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:626) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:622) 
    at org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.processRenderComponent(PartialViewContextImpl.java:576) 
    at org.apache.myfaces.context.servlet.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:554) 
    at org.apache.myfaces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:207) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:773) 
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051) 
    at javax.faces.component.UIForm.visitTree(UIForm.java:246) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793) 
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793) 
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051) 
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:793) 
    at javax.faces.component.UIComponentBase.visitTree(UIComponentBase.java:1051) 
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartialRendering(PartialViewContextImpl.java:443) 
    at org.apache.myfaces.context.servlet.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:363) 
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60) 
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:390) 
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:617) 
    at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1364) 
    at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:263) 
    at com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) 
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) 
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:85) 
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:240) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1230) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:779) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) 
    at colruyt.webutillib.filter.ResponseBufferFilter.doFilter(ResponseBufferFilter.java:35) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
    at colruyt.webutillib.session.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:65) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
    at colruyt.webutillib.security.SecurityFilter.doFilter(SecurityFilter.java:132) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:960) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1064) 
    at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:87) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:914) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1662) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:84) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1702) 

ответ

2

Проблема решена.

После анализа исключения, где в методе findcolumningroup() существует исключение с нулевым указателем. Похоже, что хотя p: columngroup не используется, ожидается, что p: columngroup будет присутствовать, поскольку datatable находится внутри datagrid. Поэтому я поместил p: columngroup для заголовков и сортировки для него и столбцы, отделенные от него. Затем он уставился на работу.

<p:dataGrid id="datagrid123" var="parentsvo" value="#{helloMB.parentVOs}" columns="1" rowIndexVar="rownind"> 

<f:facet name="header"> 
      Cars for Sale 
     </f:facet> 

     <p:dataTable id="DTABLETABLE" var="childvo" value="#   {parentsvo.childVOs}" rowIndexVar="rownindex" 
    > 
     <p:columnGroup id="columng" type="header"> 
    <p:row> 
     <p:column headerText="Name" sortBy="#{childvo.name}"/> 
     </p:row> 
    </p:columnGroup> 

     <p:column id="one" > 
     <h:outputText value="#{childvo.name}" /> 
     </p:column> 
     </p:dataTable> 

-1

вы пытались установить идентификаторы на DataGrid panelgrid и DataTable?

+0

Да, я пытался добавить идентификаторы всех компонентов. все тот же выпуск. –