Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datatable: lazy component isn't skipped when its parent has rendered property to false #7130

Closed
oarenas-GI opened this issue Mar 15, 2021 · 0 comments
Assignees
Labels
10.0.3 🐞 defect Bug...Something isn't working
Milestone

Comments

@oarenas-GI
Copy link

Describe the defect
It looks like lazy datatable isn't skipped when its parent has rendered property to false. When the page is loading, for some reason, it's calling savestate method from Datatable and fails. This error didn't appear on Primefaces 8.0.7.

Environment:

  • Server: Payara Server 5.2021.1 (community)
  • PF Version: 10.0
  • JSF + version: included in the specific Payara version
  • Affected browsers: ALL

To Reproduce
Steps to reproduce the behavior:

  1. Run application server
  2. Go to dummy-page.xhtml
  3. See error
    Error Rendering View[/dummy-page.xhtml] javax.el.ELException: /dummy-page.xhtml @13,63 rendered="#{dummyBean.checked}": java.lang.RuntimeException: Unexpected property read at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:77) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:170) at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:313) at org.primefaces.component.api.ColumnAware.forEachColumn(ColumnAware.java:58) at org.primefaces.component.api.ColumnAware.forEachColumn(ColumnAware.java:52) at org.primefaces.component.api.ColumnAware.resetDynamicColumns(ColumnAware.java:315) at org.primefaces.component.datatable.DataTable.saveState(DataTable.java:935) at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$3.visit(FaceletPartialStateManagementStrategy.java:475) at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:127) at org.primefaces.component.api.UIData.visitTree(UIData.java:691) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIForm.visitTree(UIForm.java:347) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.saveView(FaceletPartialStateManagementStrategy.java:464) at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:64) at com.sun.faces.application.view.WriteBehindStateWriter.getState(WriteBehindStateWriter.java:310) at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:204) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:484) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:170) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:102) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:199) at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:708) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1636) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:331) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.CspFilter.doFilter(CspFilter.java:39) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.XSSFilter.doFilter(XSSFilter.java:29) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.CharsetFilter.doFilter(CharsetFilter.java:20) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.TimesFilter.doFilter(TimesFilter.java:42) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.SessionFilter.doFilter(SessionFilter.java:70) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549) at java.lang.Thread.run(Thread.java:748) Caused by: javax.el.ELException: java.lang.RuntimeException: Unexpected property read at javax.el.BeanELResolver.getValue(BeanELResolver.java:304) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:156) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:184) at com.sun.el.parser.AstValue.getValue(AstValue.java:114) at com.sun.el.parser.AstValue.getValue(AstValue.java:177) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183) at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73) ... 72 more Caused by: java.lang.RuntimeException: Unexpected property read at com.gi.toweb.web.dummy.DummyBean.isChecked(DummyBean.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at javax.el.BeanELResolver.getValue(BeanELResolver.java:299) ... 80 more |#] StandardWrapperValve[Faces Servlet]: Servlet.service() for servlet Faces Servlet threw exception java.lang.RuntimeException: Unexpected property read at com.gi.toweb.web.dummy.DummyBean.isChecked(DummyBean.java:43) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at javax.el.BeanELResolver.getValue(BeanELResolver.java:299) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:156) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:184) at com.sun.el.parser.AstValue.getValue(AstValue.java:114) at com.sun.el.parser.AstValue.getValue(AstValue.java:177) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:183) at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at org.jboss.weld.module.web.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:73) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:170) at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:313) at org.primefaces.component.api.ColumnAware.forEachColumn(ColumnAware.java:58) at org.primefaces.component.api.ColumnAware.forEachColumn(ColumnAware.java:52) at org.primefaces.component.api.ColumnAware.resetDynamicColumns(ColumnAware.java:315) at org.primefaces.component.datatable.DataTable.saveState(DataTable.java:935) at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$3.visit(FaceletPartialStateManagementStrategy.java:475) at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:127) at org.primefaces.component.api.UIData.visitTree(UIData.java:691) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIForm.visitTree(UIForm.java:347) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at javax.faces.component.UIComponent.visitTree(UIComponent.java:1468) at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.saveView(FaceletPartialStateManagementStrategy.java:464) at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:64) at com.sun.faces.application.view.WriteBehindStateWriter.getState(WriteBehindStateWriter.java:310) at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:204) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:484) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:170) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:132) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:102) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:76) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:199) at javax.faces.webapp.FacesServlet.executeLifecyle(FacesServlet.java:708) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:451) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1636) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:331) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.CspFilter.doFilter(CspFilter.java:39) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.XSSFilter.doFilter(XSSFilter.java:29) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.CharsetFilter.doFilter(CharsetFilter.java:20) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.TimesFilter.doFilter(TimesFilter.java:42) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at com.gi.toweb.web.filter.SessionFilter.doFilter(SessionFilter.java:70) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:253) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:257) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:757) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:577) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238) at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217) at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182) at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218) at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260) at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177) at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109) at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88) at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33) at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569) at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549) at java.lang.Thread.run(Thread.java:748)

Expected behavior
It should show a blank page.

Example XHTML

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:body>
        <h:form prependId="false">
            <f:metadata>
                <f:viewAction action="#{dummyBean.init()}"/>
            </f:metadata>
            <h:panelGroup rendered="false">
                <p:dataTable value="#{dummyBean.lazyModel}" var="item"
                             lazy="true">
                    <p:column rendered="#{dummyBean.checked}">
                        <h:outputText value="#{item}" />
                    </p:column>
                </p:dataTable>
            </h:panelGroup>
        </h:form>
    </h:body>
</html>

Example Bean

@Named
@ViewScoped
public class DummyBean implements Serializable {

    private static final long serialVersionUID = 1L;
    
    private LazyDataModel<Integer> lazyModel;
    
    public void init() {
        lazyModel = new LazyDataModel<Integer>() {
            @Override
            public String getRowKey(Integer integer) {
                return String.valueOf(integer);
            }
            
            @Override
            public List<Integer> load(int i, int i1, Map<String, SortMeta> map, Map<String, FilterMeta> map1) {
                return IntStream.of(1, 2, 3, 4, 5)
                        .boxed()
                        .collect(Collectors.toList());
            }
        };
    }

    public boolean isChecked() {
        throw new RuntimeException("Unexpected property read");
    }

    public LazyDataModel<Integer> getLazyModel() {
        return lazyModel;
    }

}
@oarenas-GI oarenas-GI added the 🐞 defect Bug...Something isn't working label Mar 15, 2021
@tandraschko tandraschko self-assigned this Mar 16, 2021
@tandraschko tandraschko added this to the 11.0.0 milestone Mar 16, 2021
tandraschko added a commit that referenced this issue Mar 16, 2021
christophs78 added a commit to christophs78/primefaces-integration-tests that referenced this issue Mar 17, 2021
@mertsincan mertsincan added LTS-PORT The fix can be ported to LTS versions and removed 10.0.1 labels May 3, 2021
@buunsal buunsal added 10.0.3 and removed LTS-PORT The fix can be ported to LTS versions labels Jun 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
10.0.3 🐞 defect Bug...Something isn't working
Projects
None yet
Development

No branches or pull requests

5 participants