Uploaded image for project: 'RichFaces'
  1. RichFaces
  2. RF-12654

PartialViewRender skips check for whether column is rendered before checking if children can be rendered

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 4.3.0.M2
    • Fix Version/s: 4.5.1
    • Component/s: None
    • Labels:
    • Environment:

      JBoss 7.1.1.Final

    • Sprint:
      4.5.1 - Sprint 1

      Description

      When using rendered on a component within a rich:column of a rich:dataTable, the EL on the component is executed even if the column is not rendered.

      The expected behavior (per my loose understanding of the JSF spec) would suggest that the traversal should have short-circuited before checking the unrendered column's children.

      This behavior exists at least as far back as 4.1.0.Final.

      Given this minimal example:

      <rich:dataTable value="#{bean.foos}" var="foo">
         <rich:column rendered="false">
             <h:outputText value="#{foo.bar}" rendered="#{foo.propertyDoesNotExist != null}" />
         </rich:column>
      
         <rich:column>
             <a4j:commandButton value="Test" action="#{bean.noop}"
                 execute="@this" render="@form" />
         </rich:column>
      </rich:dataTable>
      

      Clicking the Test button would result in a stack trace similar to the following:

       /index.xhtml @33,96 rendered="#{foo.propertyDoesNotExist != null}": The class 'org.richfaces.tests.Foo' does not have the property 'propertyDoesNotExist'.
      	at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111) [jsf-impl-2.1.7-jbossorg-2.jar:]
      	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:413) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIComponent.isVisitable(UIComponent.java:1669) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1602) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at org.richfaces.component.UIDataAdaptor$DataVisitorForVisitTree.process(UIDataAdaptor.java:199) [richfaces-components-ui-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:65) [richfaces-core-api-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.component.UIDataAdaptor.walk(UIDataAdaptor.java:796) [richfaces-components-ui-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.component.UIDataAdaptor.visitDataChildren(UIDataAdaptor.java:1269) [richfaces-components-ui-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.component.UIDataTableBase.visitDataChildren(UIDataTableBase.java:395) [richfaces-components-ui-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.component.UIDataAdaptor.visitTree(UIDataAdaptor.java:1347) [richfaces-components-ui-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIForm.visitTree(UIForm.java:371) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at javax.faces.component.UIComponent.visitTree(UIComponent.java:1623) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at org.richfaces.context.ExtendedPartialViewContextImpl.visitActivatorComponent(ExtendedPartialViewContextImpl.java:440) [richfaces-core-impl-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.context.ExtendedPartialViewContextImpl.visitActivatorAtExecute(ExtendedPartialViewContextImpl.java:310) [richfaces-core-impl-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.context.ExtendedPartialViewContextImpl.getExecuteIds(ExtendedPartialViewContextImpl.java:98) [richfaces-core-impl-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at org.richfaces.context.ExtendedPartialViewContextImpl.isExecuteAll(ExtendedPartialViewContextImpl.java:148) [richfaces-core-impl-4.3.0.20121024-M2.jar:4.3.0.20121024-M2]
      	at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:929) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
      	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:]
      

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  michpetrov Michal Petrov
                  Reporter:
                  steeltomato Ken H
                • Votes:
                  3 Vote for this issue
                  Watchers:
                  9 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved:

                    Time Tracking

                    Estimated:
                    Original Estimate - 1 hour
                    1h
                    Remaining:
                    Remaining Estimate - 1 hour
                    1h
                    Logged:
                    Time Spent - Not Specified
                    Not Specified