[richfaces-issues] [JBoss JIRA] (RF-12654) PartialViewRender skips check for whether column is rendered before checking if children can be rendered

Ken H (JIRA) jira-events at lists.jboss.org
Tue Dec 11 16:51:17 EST 2012


     [ https://issues.jboss.org/browse/RF-12654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ken H updated RF-12654:
-----------------------

    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:
{code}
<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>
{code}

Clicking the Test button would result in a stack trace similar to the following:
{code}
 /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:]
{code}

  was:
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.

For example:

index.html
{code}
<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>
{code}

Results in a stack trace similar to the following:
{code}
 /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:]
{code}


    
> PartialViewRender skips check for whether column is rendered before checking if children can be rendered
> --------------------------------------------------------------------------------------------------------
>
>                 Key: RF-12654
>                 URL: https://issues.jboss.org/browse/RF-12654
>             Project: RichFaces
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 4.3.0.M2
>         Environment: JBoss 7.1.1.Final
>            Reporter: Ken H
>
> 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:
> {code}
> <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>
> {code}
> Clicking the Test button would result in a stack trace similar to the following:
> {code}
>  /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:]
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the richfaces-issues mailing list