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()) {