[ 
https://issues.jboss.org/browse/RF-12654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12940667#comment-12940667
 ] 

Alexandre Heroux commented on RF-12654:
---------------------------------------

Rewrite the class ExtendedPartialViewContextImpl to skip unrendered and change 
two methods

        private void visitActivatorAtExecute() {
                ExecuteComponentCallback callback = new 
ExecuteComponentCallback(
                                getFacesContext(), behaviorEvent);

                if (visitActivatorComponent(
                                activatorComponentId,
                                callback,
                                new 
HashSet<VisitHint>(Arrays.asList(VisitHint.SKIP_UNRENDERED)))) {
                        setupExecuteCallbackData(callback);

                        if (!executeIds.contains(ALL)) {
                                addImplicitExecuteIds(executeIds);
                        }
                } else {
                        // TODO - log or exception?
                        // TODO - process default execute value
                }
        }

and

private void visitActivatorAtRender(Collection<String> ids) {
                if (!isRenderAll()) {
                        RenderComponentCallback callback = new 
RenderComponentCallback(
                                        getFacesContext(), behaviorEvent);

                        if (visitActivatorComponent(
                                        activatorComponentId,
                                        callback,
                                        new HashSet<VisitHint>(Arrays
                                                        
.asList(VisitHint.SKIP_UNRENDERED)))) {
                                setupRenderCallbackData(callback);
                        } else {
                                // TODO - the same as for "execute"
                        }

                        // take collection value stored during execute
                        if (componentRenderIds != null) {
                                ids.addAll(componentRenderIds);
                        }

                        if (!Boolean.TRUE.equals(renderAll) && 
!ids.contains(ALL)) {
                                addImplicitRenderIds(ids, limitRender);

                                appendOnbeforedomupdate(onbeforedomupdate);
                                appendOncomplete(oncomplete);
                                setResponseData(responseData);
                        }
                }
        }
                
> 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
>              Labels: lazy-loaded
>             Fix For: 5-Tracking
>
>
> 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
_______________________________________________
richfaces-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to