The dataTable component is throwing an exception when it has a sorted column, and more specifically when it is inside a rowExpansion of another dataTable.
The problem occurs if I click to sort the column inside the inner dataTable and after I try to update the parent rowExpansion or dataTable. Follow the code:
Code: Select all
<p:dataTable id="listaitem" var="item"
value="#{myView.microRegioes}" sortBy="#{item.name}" rowIndexVar="rowIndex"
emptyMessage="#{msg.dadosNaoEncontrados}" scrollable="true" scrollHeight="295" rowKey="#{item.code}">
<p:column>
<p:rowToggler />
</p:column>
<p:column headerText="Item" sortBy="#{item.code}">
<h:outputText value="#{item.code} - #{item.name}" />
</p:column>
<p:column headerText="Total" sortBy="#{item.totalVolumessubitems}">
<h:outputText value="#{item.totalSubitems}" />
</p:column>
<p:rowExpansion id="expRow">
<p:dataTable id="subitems" styleClass="list"
var="subitem" value="#{item.subitems}" rowIndexVar="rowIndex"
rowKey="#{subitem.code}" selection="#{myView.removedSubitems}" sortBy="#{subitem.code}">
<p:ajax event="toggleSelect" listener="#{myView.togglesubitemsitem}" async="true" />
<p:ajax event="rowSelectCheckbox" listener="#{myView.excluirsubitem}" />
<p:ajax event="rowUnselectCheckbox" listener="#{myView.retornarsubitem}" />
<p:column selectionMode="multiple" />
<p:column sortBy="#{subitem.name}" headerText="Subitem">
<h:outputText value="#{subitem.name}" />
</p:column>
<p:column sortBy="#{subitem.total}" headerText="Total">
<h:outputText value="#{subitem.total}" />
</p:column>
</p:dataTable>
</p:rowExpansion>
</p:dataTable>
Code: Select all
java.lang.NullPointerException
at org.primefaces.component.datatable.DataTable.findColumn(DataTable.java:785)
at org.primefaces.component.datatable.DataTable.getSortColumn(DataTable.java:1268)
at org.primefaces.component.datatable.feature.SortFeature.singleSort(SortFeature.java:135)
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:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
at org.primefaces.component.datatable.feature.RowExpandFeature.encodeExpansion(RowExpandFeature.java:65)
at org.primefaces.component.datatable.feature.RowExpandFeature.encode(RowExpandFeature.java:36)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:78)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:582)
at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
at org.primefaces.component.api.UIData.visitTree(UIData.java:692)
at org.primefaces.component.api.UIData.visitColumnContent(UIData.java:879)
at org.primefaces.component.api.UIData.visitRows(UIData.java:853)
at org.primefaces.component.api.UIData.visitTree(UIData.java:707)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at org.primefaces.component.api.UIData.visitColumnContent(UIData.java:879)
at org.primefaces.component.api.UIData.visitRows(UIData.java:853)
at org.primefaces.component.api.UIData.visitTree(UIData.java:707)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIForm.visitTree(UIForm.java:362)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:403)
at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:322)
at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:430)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:105)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
at br.com.marabraz.siscorpweb.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:80)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
at br.com.marabraz.siscorpweb.filter.LoginSessionFilter.doFilter(LoginSessionFilter.java:79)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3729)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3695)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2285)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2184)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1459)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
I am using: Primefaces 5.1, JSF 2.2 and Weblogic 11gR1 (10.3.5).