[
https://issues.jboss.org/browse/RF-12654?page=com.atlassian.jira.plugin.s...
]
Brian Leathem edited comment on RF-12654 at 2/3/14 2:09 PM:
------------------------------------------------------------
Rewrite the class ExtendedPartialViewContextImpl to skip unrendered and change two
methods
{code}
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
}
}
{code}
and
{code}
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);
}
}
}
{code}
was (Author: grypho0):
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