[JBoss JIRA] (RF-12654) PartialViewRender skips check for whether column is rendered before checking if children can be rendered
by Alexandre Heroux (JIRA)
[ https://issues.jboss.org/browse/RF-12654?page=com.atlassian.jira.plugin.s... ]
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
10 years, 10 months