Author: nbelaevski
Date: 2008-05-26 18:15:10 -0400 (Mon, 26 May 2008)
New Revision: 8768
Modified:
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
Log:
http://jira.jboss.com/jira/browse/RF-3537
Modified:
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
===================================================================
---
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-05-26
15:25:08 UTC (rev 8767)
+++
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-05-26
22:15:10 UTC (rev 8768)
@@ -24,6 +24,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -86,22 +87,47 @@
public void afterPhase(PhaseEvent event) {
}
- private void collectConnections(UIComponent component, ComponentConnections connections)
{
- if (component.isRendered()) {
- if (component instanceof UIDatascroller) {
- UIDatascroller datascroller = (UIDatascroller) component;
- UIData dataTable = datascroller.getDataTable();
+ private static boolean isRendered(List<UIComponent> components) {
+ boolean rendered;
+
+ for (UIComponent component : components) {
+ rendered = false;
- connections.addConnection(dataTable, datascroller);
+ try {
+ rendered = component.isRendered();
+ } catch (Exception e) {
+ //ignore that
+ if (log.isDebugEnabled()) {
+ log.debug(e.getLocalizedMessage(), e);
+ }
}
-
- Iterator<UIComponent> children = component.getFacetsAndChildren();
- while(children.hasNext()) {
- collectConnections(children.next(), connections);
+
+ if (!rendered) {
+ return false;
}
}
+
+ return true;
}
+
+ private void collectConnections(UIComponent component, ComponentConnections connections,
LinkedList<UIComponent> parentComponents) {
+ parentComponents.addLast(component);
+ if (component instanceof UIDatascroller && isRendered(parentComponents)) {
+ UIDatascroller datascroller = (UIDatascroller) component;
+ UIData dataTable = datascroller.getDataTable();
+
+ connections.addConnection(dataTable, datascroller);
+ }
+
+ Iterator<UIComponent> children = component.getFacetsAndChildren();
+ while(children.hasNext()) {
+ collectConnections(children.next(), connections, parentComponents);
+ }
+
+ parentComponents.removeLast();
+ }
+
private static boolean same(Object o1, Object o2) {
if (o1 instanceof ValueExpression && o2 instanceof ValueExpression) {
ValueExpression ve1 = (ValueExpression) o1;
@@ -120,7 +146,7 @@
UIViewRoot viewRoot = facesContext.getViewRoot();
if (viewRoot != null) {
ComponentConnections connections = new ComponentConnections();
- collectConnections(viewRoot, connections);
+ collectConnections(viewRoot, connections, new LinkedList<UIComponent>());
Iterator<Entry<UIData, List<UIDatascroller>>> entries =
connections.iterator();