You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by cr...@apache.org on 2006/09/29 20:20:32 UTC

svn commit: r451376 - /shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java

Author: craigmcc
Date: Fri Sep 29 11:20:32 2006
New Revision: 451376

URL: http://svn.apache.org/viewvc?view=rev&rev=451376
Log:
Reduce the set of request scoped beans that are forcibly removed in
requestDestroyed().  In theory this should not be necessary, because the
container is supposed to call requestDestroyed() only *after* all
request processing has been completed.  Alas, this is apparantly not
true in all cases.  Therefore, we should only delete instances for which
we are going to create a destroy() callback for (AbstractRequestBean and
ViewController).

Based on a patch by Mario Ivankovits.

SHALE-296


Modified:
    shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java

Modified: shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java?view=diff&rev=451376&r1=451375&r2=451376
==============================================================================
--- shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java (original)
+++ shale/framework/trunk/shale-core/src/main/java/org/apache/shale/view/faces/LifecycleListener.java Fri Sep 29 11:20:32 2006
@@ -26,6 +26,7 @@
 import javax.servlet.ServletContextAttributeListener;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
+import javax.servlet.ServletRequest;
 import javax.servlet.ServletRequestAttributeEvent;
 import javax.servlet.ServletRequestAttributeListener;
 import javax.servlet.ServletRequestEvent;
@@ -498,13 +499,17 @@
             tiger.requestDestroyed(event);
         }
 
-        // Remove any AbstractRequestBean attributes,
+        // Remove any AbstractRequestBean or ViewController attributes,
         // which will trigger an attributeRemoved event
         List list = new ArrayList();
-        Enumeration names = event.getServletRequest().getAttributeNames();
+        ServletRequest request = event.getServletRequest();
+        Enumeration names = request.getAttributeNames();
         while (names.hasMoreElements()) {
             String name = (String) names.nextElement();
-            list.add(name);
+            Object value = request.getAttribute(name);
+            if ((value instanceof AbstractRequestBean) || (value instanceof ViewController)) {
+                list.add(name);
+            }
         }
         Iterator keys = list.iterator();
         while (keys.hasNext()) {