我有像列表对象列表这样的记录,需要像嵌套数据表一样显示。因此决定在datagrid / datalist / uirepeat / p中使用datatable:对数据表进行重复和排序。这是下面的代码。它能够完美地显示,但在对生成的多个数据表进行排序并点击提交后,在渲染到同一页面时,应用程序将NullpointerException
放入primefaces
数据表findcolumngroup
。仅当我们对生成的多个数据表进行排序时才会发生这种情况。如果仅对生成的1个数据表进行排序并点击提交按钮,则没有问题。此外,如果没有应用排序,那么它正常工作,没有任何异常。 bean范围是viewscope。我还设置了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)
答案 0 :(得分: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 :(得分:-1)
您是否尝试在datagrid panelgrid和datatable上设置ID?