[richfaces-svn-commits] JBoss Rich Faces SVN: r9080 - in trunk: framework/impl/src/main/java/org/ajax4jsf/application and 6 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Tue Jun 17 12:29:43 EDT 2008


Author: konstantin.mishin
Date: 2008-06-17 12:29:43 -0400 (Tue, 17 Jun 2008)
New Revision: 9080

Removed:
   trunk/ui/datascroller/src/main/config/faces/
   trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java
Modified:
   trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
   trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
   trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
   trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
   trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
   trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
   trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
   trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
Log:
RF-2815

Modified: trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -7,6 +7,12 @@
 
 public interface ComponentPhaseEventHandler extends Serializable {
 
-	void beforePhase(UIComponent component, PhaseEvent event);
+	Object beforePhaseBegin(PhaseEvent event);
 
+	void componentBegin(UIComponent component, PhaseEvent event, Object state);
+
+	void componentEnd(UIComponent component, PhaseEvent event, Object state);
+
+	void beforePhaseEnd(PhaseEvent event, Object state);
+
 }

Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -22,7 +22,6 @@
 package org.ajax4jsf.application;
 
 import java.io.IOException;
-import java.util.List;
 
 import javax.faces.FacesException;
 import javax.faces.application.ViewHandler;
@@ -39,9 +38,7 @@
 import org.ajax4jsf.resource.InternetResourceBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.richfaces.event.ComponentPhaseEventHandler;
 import org.richfaces.event.ComponentViewPhaseListener;
-import org.richfaces.util.ComponentPhaseEventHandlerUtils;
 
 /**
  * @author asmirnov at exadel.com (latest modification by $Author: alexsmirnov $)
@@ -93,9 +90,7 @@
 			}
 		}
 		
-		List<ComponentPhaseEventHandler> handlers = ComponentPhaseEventHandlerUtils.getHandlers();
-		ComponentViewPhaseListener phaseListener = new ComponentViewPhaseListener(handlers);
-		riRoot.addPhaseListener(phaseListener);
+		riRoot.addPhaseListener(new ComponentViewPhaseListener());
 		return riRoot;
 	}
 

Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptor.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -1647,7 +1647,7 @@
 		super.setValue(value);
 	}
 	
-	public void beforePhase(PhaseEvent event) {
+	public void beforeRenderResponse(PhaseEvent event) {
 		FacesContext context = event.getFacesContext();
 		resetDataModel();
 		if (null != childState && !keepSaved(context)) {

Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -14,17 +14,35 @@
 	/**
 	 * 
 	 */
-	private static final long serialVersionUID = -9027449995146628492L;
+	private static final long serialVersionUID = -1356035330152521515L;
 
 	/* (non-Javadoc)
-	 * @see org.richfaces.component.ComponentPhaseEventHandler#beforePhase(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent)
+	 * @see org.richfaces.event.ComponentPhaseEventHandler#bcomponentEnd(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent, java.lang.Object)
 	 */
-	public void beforePhase(UIComponent component, PhaseEvent event) {
+	public void componentEnd(UIComponent component, PhaseEvent event,
+			Object state) {}
+
+	/* (non-Javadoc)
+	 * @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
+	 */
+	public Object beforePhaseBegin(PhaseEvent event) {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent, java.lang.Object)
+	 */
+	public void beforePhaseEnd(PhaseEvent event, Object state) {}
+
+	/* (non-Javadoc)
+	 * @see org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent, java.lang.Object)
+	 */
+	public void componentBegin(UIComponent component, PhaseEvent event,
+			Object state) {
 		if (component instanceof UIDataAdaptor) {
-			((UIDataAdaptor) component).beforePhase(event);
+			((UIDataAdaptor) component).beforeRenderResponse(event);
 			
 		}
-
 	}
 
 }

Modified: trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -1,7 +1,6 @@
 package org.richfaces.event;
 
 import java.util.Iterator;
-import java.util.List;
 
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIViewRoot;
@@ -10,6 +9,8 @@
 import javax.faces.event.PhaseId;
 import javax.faces.event.PhaseListener;
 
+import org.richfaces.util.ComponentPhaseEventHandlerUtils;
+
 public class ComponentViewPhaseListener implements PhaseListener {
 
 	/**
@@ -17,34 +18,39 @@
 	 */
 	private static final long serialVersionUID = -2437433246178955788L;
 
-	private List<ComponentPhaseEventHandler> handlers = null;
-	
-	public ComponentViewPhaseListener(List<ComponentPhaseEventHandler> handlers) {
-		this.handlers = handlers;
-	}
+	private static ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
+	private static Object[] states = null;
 
 	public void afterPhase(PhaseEvent event) {
 	}
 	
-	private void doBeforePhase(PhaseEvent event, UIComponent component) {
-		if (component.isRendered() && handlers != null) {
-			for (ComponentPhaseEventHandler handler : handlers) {
-				handler.beforePhase(component, event);
-			}
-			Iterator<UIComponent> children = component.getFacetsAndChildren();
-			while (children.hasNext()) {
-				doBeforePhase(event, children.next());
-			}
+	private void beforePhase(PhaseEvent event, UIComponent component) {
+		for (int i = 0; i < handlers.length; i++) {
+			handlers[i].componentBegin(component, event, states[i]);
 		}
-		
+		Iterator<UIComponent> children = component.getFacetsAndChildren();
+		while (children.hasNext()) {
+			beforePhase(event, children.next());
+		}
+		for (int i = 0; i < handlers.length; i++) {
+			handlers[i].componentEnd(component, event, states[i]);
+		}
 	}
 
 	public void beforePhase(PhaseEvent event) {
+		states = new Object[handlers.length];
+		for (int i = 0; i < handlers.length; i++) {
+			states[i] = handlers[i].beforePhaseBegin(event);
+		}
 		FacesContext facesContext = event.getFacesContext();
 		UIViewRoot viewRoot = facesContext.getViewRoot();
-		if (viewRoot != null) {
-			doBeforePhase(event, viewRoot);
+		if (viewRoot != null && handlers != null) {
+			beforePhase(event, viewRoot);
 		}
+		for (int i = 0; i < handlers.length; i++) {
+			handlers[i].beforePhaseEnd(event, states[i]);
+		}
+		states = null;
 	}
 
 	public PhaseId getPhaseId() {

Modified: trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -3,9 +3,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Enumeration;
-import java.util.List;
+import java.util.LinkedList;
 import java.util.Scanner;
 
 import javax.faces.FacesException;
@@ -16,11 +15,11 @@
 
 public class ComponentPhaseEventHandlerUtils{
 	
-	static private List<ComponentPhaseEventHandler> handlers = null;
+	static private ComponentPhaseEventHandler[] handlers = null;
 	
 	private ComponentPhaseEventHandlerUtils() {}
 
-	public static List<ComponentPhaseEventHandler> getHandlers() {
+	public static ComponentPhaseEventHandler[] getHandlers() {
 		if (handlers == null) {
 			 synchronized(ComponentPhaseEventHandlerUtils.class) {
 				if (handlers == null) {
@@ -32,7 +31,7 @@
 	}
 
 	private static void init() {
-		handlers = new ArrayList<ComponentPhaseEventHandler>();
+		LinkedList<ComponentPhaseEventHandler> list = new LinkedList<ComponentPhaseEventHandler>();
 		ClassLoader loader = Thread.currentThread().getContextClassLoader();
 		String resource = "META-INF/services/org.richfaces.component.ComponentPhaseEventHandler";
 		try {
@@ -46,7 +45,7 @@
 						Class<?> handlerClass = ServicesUtils.loadClass(loader, handlerClassName);
 						Object handler = handlerClass.newInstance();
 						if (handler instanceof ComponentPhaseEventHandler) {
-							handlers.add((ComponentPhaseEventHandler) handler);
+							list.add((ComponentPhaseEventHandler) handler);
 						}
 					} catch (Exception e) {
 						throw new FacesException("Error create instance for class "+ handlerClassName, e);
@@ -57,5 +56,6 @@
 		} catch (IOException e) {
 			throw new FacesException("Error load resource "+ resource, e);
 		}
+		handlers = list.toArray(new ComponentPhaseEventHandler[list.size()]);
 	}
 }

Modified: trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
===================================================================
--- trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler	2008-06-17 16:29:43 UTC (rev 9080)
@@ -1 +1 @@
-org.ajax4jsf.component.UIDataAdaptorPhaseEventHandler
\ No newline at end of file
+org.richfaces.component.DataScrollerViewPhaseListener
\ No newline at end of file

Deleted: trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java
===================================================================
--- trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerPhaseListener.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -1,64 +0,0 @@
-/**
- * License Agreement.
- *
- *  JBoss RichFaces - Ajax4jsf Component Library
- *
- * Copyright (C) 2007  Exadel, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1 as published by the Free Software Foundation.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
- */
-
-package org.richfaces.component;
-
-import javax.faces.component.UIViewRoot;
-import javax.faces.context.FacesContext;
-import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
-
-/**
- * Created 08.03.2008
- * @author Nick Belaevski
- * @since 3.2
- */
-
-public class DataScrollerPhaseListener implements PhaseListener {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -3614288642745891577L;
-
-	private static final String ATTRIBUTE_NAME = DataScrollerPhaseListener.class.getName();
-	
-	private PhaseListener listener = new DataScrollerViewPhaseListener();
-	
-	public void afterPhase(PhaseEvent event) {
-	}
-
-	public void beforePhase(PhaseEvent event) {
-		FacesContext facesContext = event.getFacesContext();
-		UIViewRoot viewRoot = facesContext.getViewRoot();
-		if (viewRoot != null && !Boolean.TRUE.equals(
-				viewRoot.getAttributes().get(ATTRIBUTE_NAME))) {
-			viewRoot.addPhaseListener(listener);
-			viewRoot.getAttributes().put(ATTRIBUTE_NAME, Boolean.TRUE);
-		}
-	}
-
-	public PhaseId getPhaseId() {
-		return PhaseId.RENDER_RESPONSE;
-	}
-
-}

Modified: trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
===================================================================
--- trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java	2008-06-17 15:01:56 UTC (rev 9079)
+++ trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java	2008-06-17 16:29:43 UTC (rev 9080)
@@ -33,16 +33,14 @@
 import javax.el.ValueExpression;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIData;
-import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 import javax.faces.event.PhaseEvent;
-import javax.faces.event.PhaseId;
-import javax.faces.event.PhaseListener;
 
 import org.ajax4jsf.Messages;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.richfaces.component.util.MessageUtil;
+import org.richfaces.event.ComponentPhaseEventHandler;
 
 
 /**
@@ -51,7 +49,7 @@
  * @since 3.2
  */
 
-public class DataScrollerViewPhaseListener implements PhaseListener {
+public class DataScrollerViewPhaseListener implements ComponentPhaseEventHandler {
 
 	/**
 	 * 
@@ -84,9 +82,6 @@
 		}
 	}
 	
-	public void afterPhase(PhaseEvent event) {
-	}
-
 	private static boolean isRendered(List<UIComponent> components) {
 		boolean rendered;
 		
@@ -110,7 +105,10 @@
 		return true;
 	}
 	
-	private void collectConnections(UIComponent component, ComponentConnections connections, LinkedList<UIComponent> parentComponents) {
+	public void componentBegin(UIComponent component, PhaseEvent event, Object state) {
+		Object[] objects = (Object[]) state;
+		ComponentConnections connections = (ComponentConnections) objects[0];
+		LinkedList<UIComponent> parentComponents = (LinkedList<UIComponent>) objects[1];
 		parentComponents.addLast(component);
 
 		if (component instanceof UIDatascroller && isRendered(parentComponents)) {
@@ -119,13 +117,6 @@
 
 			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) {
@@ -141,96 +132,98 @@
 		return (o1 != null && o1.equals(o2)) || (o1 == null && o2 == null);
 	}
 	
-	public void beforePhase(PhaseEvent event) {
+	public void beforePhaseEnd(PhaseEvent event, Object state) {
+		Object[] objects = (Object[]) state;
+		ComponentConnections connections = (ComponentConnections) objects[0];
 		FacesContext facesContext = event.getFacesContext();
-		UIViewRoot viewRoot = facesContext.getViewRoot();
-		if (viewRoot != null) {
-			ComponentConnections connections = new ComponentConnections();
-			collectConnections(viewRoot, connections, new LinkedList<UIComponent>());
-			Iterator<Entry<UIData, List<UIDatascroller>>> entries = 
-				connections.iterator();
+		Iterator<Entry<UIData, List<UIDatascroller>>> entries = 
+			connections.iterator();
 
-			while (entries.hasNext()) {
-				Entry<UIData, List<UIDatascroller>> entry = entries.next();
-				List<UIDatascroller> scrollers = entry.getValue();
-				if (!scrollers.isEmpty()) {
-					List<Object> values = new ArrayList<Object>(scrollers.size());
-					
-					UIData data = entry.getKey();
-					UIDatascroller activeComponent = null;
-					
-					Map<String, Object> attributes = data.getAttributes();
-					Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
+		while (entries.hasNext()) {
+			Entry<UIData, List<UIDatascroller>> entry = entries.next();
+			List<UIDatascroller> scrollers = entry.getValue();
+			if (!scrollers.isEmpty()) {
+				List<Object> values = new ArrayList<Object>(scrollers.size());
+				
+				UIData data = entry.getKey();
+				UIDatascroller activeComponent = null;
+				
+				Map<String, Object> attributes = data.getAttributes();
+				Object pageValue = attributes.get(UIDatascroller.SCROLLER_STATE_ATTRIBUTE);
 
-					if (pageValue == null) {
-						boolean valid = true;
+				if (pageValue == null) {
+					boolean valid = true;
 
-						for (UIDatascroller datascroller : scrollers) {
-							Object nextPageValue = null;
+					for (UIDatascroller datascroller : scrollers) {
+						Object nextPageValue = null;
 
-							if (datascroller.isLocalPageSet()) {
-								nextPageValue = datascroller.getPage();
-								attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
-								datascroller.resetLocalPage();
-							} else {
-								nextPageValue = datascroller.getValueExpression("page");
-							}
+						if (datascroller.isLocalPageSet()) {
+							nextPageValue = datascroller.getPage();
+							attributes.put(UIDatascroller.SCROLLER_STATE_ATTRIBUTE, nextPageValue);
+							datascroller.resetLocalPage();
+						} else {
+							nextPageValue = datascroller.getValueExpression("page");
+						}
 
-							if (!values.isEmpty() && !same(values.get(values.size() - 1), nextPageValue)) {
-								valid = false;
-							}
-							
-							values.add(nextPageValue);
-
-							if (nextPageValue != null) {
-								activeComponent = datascroller;
-								pageValue = nextPageValue;
-							} 
+						if (!values.isEmpty() && !same(values.get(values.size() - 1), nextPageValue)) {
+							valid = false;
 						}
+						
+						values.add(nextPageValue);
 
-						if (!valid) {
-							StringBuilder builder = new StringBuilder("\n[");
-							Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
-							Iterator<Object> valueItr = values.iterator();
+						if (nextPageValue != null) {
+							activeComponent = datascroller;
+							pageValue = nextPageValue;
+						} 
+					}
+
+					if (!valid) {
+						StringBuilder builder = new StringBuilder("\n[");
+						Iterator<UIDatascroller> scrollerItr = scrollers.iterator();
+						Iterator<Object> valueItr = values.iterator();
+						
+						while (scrollerItr.hasNext()) {
+							UIDatascroller next = scrollerItr.next();
+							builder.append(MessageUtil.getLabel(facesContext, next));
+							builder.append(": ");
 							
-							while (scrollerItr.hasNext()) {
-								UIDatascroller next = scrollerItr.next();
-								builder.append(MessageUtil.getLabel(facesContext, next));
-								builder.append(": ");
-								
-								Object value = valueItr.next();
-								if (value instanceof Expression) {
-									builder.append(((Expression) value).getExpressionString());
-								} else {
-									builder.append(value);
-								}
-								
-								builder.append(scrollerItr.hasNext() ? ",\n" : "]");
+							Object value = valueItr.next();
+							if (value instanceof Expression) {
+								builder.append(((Expression) value).getExpressionString());
+							} else {
+								builder.append(value);
 							}
 							
-							String formattedMessage = Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT, 
-									new Object[] {MessageUtil.getLabel(facesContext, data), builder});
-
-							
-							log.error(formattedMessage);
+							builder.append(scrollerItr.hasNext() ? ",\n" : "]");
 						}
 						
-					}
+						String formattedMessage = Messages.getMessage(Messages.DATASCROLLER_PAGES_DIFFERENT, 
+								new Object[] {MessageUtil.getLabel(facesContext, data), builder});
 
-					if (activeComponent == null) {
-						activeComponent = scrollers.get(scrollers.size() - 1);
+						
+						log.error(formattedMessage);
 					}
+					
+				}
 
-					if (pageValue != null) {
-						activeComponent.setupFirstRowValue();
-					}
+				if (activeComponent == null) {
+					activeComponent = scrollers.get(scrollers.size() - 1);
 				}
+
+				if (pageValue != null) {
+					activeComponent.setupFirstRowValue();
+				}
 			}
 		}
 	}
 
-	public PhaseId getPhaseId() {
-		return PhaseId.RENDER_RESPONSE;
+	public Object beforePhaseBegin(PhaseEvent event) {
+		return new Object[] {new ComponentConnections(), new LinkedList<UIComponent>()};
 	}
 
+	public void componentEnd(UIComponent component, PhaseEvent event, Object state) {
+		Object[] objects = (Object[]) state;
+		LinkedList<?> parentComponents = (LinkedList<?>) objects[1];
+		parentComponents.removeLast();
+	}
 }




More information about the richfaces-svn-commits mailing list