Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
 Sun Jan 30 22:58:37 2005
@@ -31,6 +31,8 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.UndeclaredThrowableException;
 import java.lang.reflect.Method;
@@ -40,13 +42,14 @@
 
 import org.apache.beehive.netui.pageflow.config.PageFlowExceptionConfig;
 import org.apache.beehive.netui.pageflow.FlowController;
-import org.apache.beehive.netui.pageflow.PageFlowException;
 import org.apache.beehive.netui.pageflow.FormData;
 import org.apache.beehive.netui.pageflow.PageFlowController;
 import org.apache.beehive.netui.pageflow.SharedFlowController;
 import org.apache.beehive.netui.pageflow.PageFlowManagedObjectException;
 import org.apache.beehive.netui.pageflow.PageFlowEventReporter;
 import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
+import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.cache.ClassLevelCache;
 import org.apache.beehive.netui.util.logging.Logger;
@@ -63,9 +66,9 @@
     private transient PageFlowEventReporter _eventReporter;
     
 
-    public void init( ServletContext servletContext )
+    public DefaultExceptionsHandler( ServletContext servletContext )
     {
-        super.init( servletContext );
+        init( null, null, servletContext );
         _eventReporter = AdapterManager.getServletContainerAdapter( 
servletContext ).getEventReporter();
     }
 
@@ -75,11 +78,14 @@
         _eventReporter = AdapterManager.getServletContainerAdapter( 
servletContext ).getEventReporter();
     }
 
-    public ActionForward handleException( Throwable ex, ActionMapping 
actionMapping, ActionForm form,
-                                          FlowController flowController, 
HttpServletRequest request,
-                                          HttpServletResponse response, 
ServletContext servletContext )
+    public ActionForward handleException( FlowControllerHandlerContext 
context, Throwable ex,
+                                          ActionMapping actionMapping, 
ActionForm form )
             throws IOException, ServletException
     {
+        FlowController flowController = context.getFlowController();
+        ServletRequest request = context.getRequest();
+        ServletResponse response = context.getResponse();
+        
         if ( _log.isInfoEnabled() )
         {
             _log.info( "Handling uncaught Throwable " + 
ex.getClass().getName() );
@@ -110,11 +116,12 @@
         if ( exceptionConfig == null )
         {
             FlowController fallbackFC =
-                    getFallbackFlowController( flowController, exClass, 
request, response, servletContext );
+                    getFallbackFlowController( flowController, exClass, 
request, response, getServletContext() );
             
             if ( fallbackFC != null )
             {
                 flowController = fallbackFC;
+                context = new FlowControllerHandlerContext( request, response, 
flowController );
                 exceptionConfig = getExceptionConfig( exClass, 
fallbackFC.getModuleConfig() );
             }
             
@@ -138,13 +145,11 @@
                 
                 if ( pfExceptionConfig.isHandlerMethod() )
                 {
-                    return invokeExceptionHandlerMethod( ex, 
pfExceptionConfig, form, actionMapping,
-                                                         flowController, 
request, response, servletContext );
+                    return invokeExceptionHandlerMethod( context, ex, 
pfExceptionConfig, form, actionMapping );
                 }
             }
             
-            ActionForward ret =
-                    invokeExceptionHandlerClass( ex, exceptionConfig, 
actionMapping, form, request, response );
+            ActionForward ret = invokeExceptionHandlerClass( context, ex, 
exceptionConfig, actionMapping, form );
             // Callback to the event reporter.
             _eventReporter.exceptionHandled( ex, actionMapping, form, 
flowController, request, response, ret );
             
@@ -157,7 +162,7 @@
             _log.error( msg.append( " unhandled by the current page flow (and 
any shared flow)" ).toString(), ex );
         }
        
-        if ( ! eatUnhandledException( ex, request, response, servletContext ) )
+        if ( ! getRegisteredHandler().eatUnhandledException( context, ex ) )
         {
             if ( ex instanceof ServletException ) throw ( ServletException ) 
ex;
             if ( ex instanceof IOException ) throw ( IOException ) ex;
@@ -167,7 +172,7 @@
         return null;
     }
     
-    public Throwable unwrapException( Throwable ex )
+    public Throwable unwrapException( FlowControllerHandlerContext context, 
Throwable ex )
     {
         //
         // If the exception was thrown in a method we called through 
reflection, it will be an
@@ -176,31 +181,30 @@
         //
         if ( ex instanceof InvocationTargetException )
         {
-            return unwrapException( ( ( InvocationTargetException ) ex 
).getTargetException() );
+            return unwrapException( context, ( ( InvocationTargetException ) 
ex ).getTargetException() );
         }
         
         if ( ex instanceof UndeclaredThrowableException )
         {
-            return unwrapException( ( ( UndeclaredThrowableException ) ex 
).getUndeclaredThrowable() );
+            return unwrapException( context, ( ( UndeclaredThrowableException 
) ex ).getUndeclaredThrowable() );
         }
         
         if ( ex instanceof ServletException )
         {
             ServletException servletException = ( ServletException ) ex;
             Throwable rootCause = servletException.getRootCause();
-            if ( rootCause != null ) return unwrapException( rootCause );
+            if ( rootCause != null ) return unwrapException( context, 
rootCause );
         }
         
         return ex;
     }
     
-    public void exposeException( Throwable ex, ActionMapping actionMapping, 
HttpServletRequest request,
-                                 HttpServletResponse response, ServletContext 
servletContext )
+    public void exposeException( FlowControllerHandlerContext context, 
Throwable ex, ActionMapping actionMapping )
     {
         //
         // Put the exception in a place where Struts/NetUI tags will find it.
         //
-        request.setAttribute( Globals.EXCEPTION_KEY, ex );
+        context.getRequest().setAttribute( Globals.EXCEPTION_KEY, ex );
     }
     
     protected ExceptionConfig getExceptionConfig( Class exceptionType, 
ModuleConfig moduleConfig )
@@ -222,7 +226,7 @@
     }
     
     protected FlowController getFallbackFlowController( FlowController 
originalFlowController, Class exClass,
-                                                        HttpServletRequest 
request, HttpServletResponse response,
+                                                        ServletRequest 
request, ServletResponse response,
                                                         ServletContext 
servletContext )
     {
         if ( originalFlowController instanceof PageFlowController )
@@ -252,9 +256,9 @@
         return null;
     }
     
-    protected ActionForward invokeExceptionHandlerClass( Throwable throwable, 
ExceptionConfig exceptionConfig,
-                                                         ActionMapping 
actionMapping, ActionForm form,
-                                                         HttpServletRequest 
request, HttpServletResponse response )
+    protected ActionForward invokeExceptionHandlerClass( 
FlowControllerHandlerContext context, Throwable throwable,
+                                                         ExceptionConfig 
exceptionConfig, ActionMapping actionMapping,
+                                                         ActionForm form )
         throws IOException, ServletException
     {
         String handlerClassName = exceptionConfig.getHandler();
@@ -264,6 +268,10 @@
             //
             // Get the exception-handler class and delegate to it.
             //
+            assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+            assert context.getResponse() instanceof HttpServletResponse : 
"don't support ServletResponse currently.";
+            HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
+            HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
             ExceptionHandler handler = ( ExceptionHandler ) 
RequestUtils.applicationInstance( handlerClassName );
             Exception ex = throwable instanceof Exception ? ( Exception ) 
throwable : new Exception( throwable );
             ActionForward result = handler.execute( ex, exceptionConfig, 
actionMapping, form, request, response );
@@ -302,15 +310,19 @@
         }
     }
     
-    protected ActionForward invokeExceptionHandlerMethod( Throwable ex, 
PageFlowExceptionConfig exceptionConfig,
-                                                          ActionForm form, 
ActionMapping actionMapping,
-                                                          FlowController 
flowController, HttpServletRequest request,
-                                                          HttpServletResponse 
response, ServletContext servletContext )
+    protected ActionForward invokeExceptionHandlerMethod( 
FlowControllerHandlerContext context, Throwable ex,
+                                                          
PageFlowExceptionConfig exceptionConfig, ActionForm form,
+                                                          ActionMapping 
actionMapping )
         throws IOException, ServletException
     {
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        assert context.getResponse() instanceof HttpServletResponse : "don't 
support ServletResponse currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
+        HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
+        FlowController flowController = context.getFlowController();
         String methodName = exceptionConfig.getHandler();
         Object unwrappedFormBean = InternalUtils.unwrapFormBean( form );
-        Method method = getExceptionHandlerMethod( methodName, ex, 
unwrappedFormBean, flowController );
+        Method method = getExceptionHandlerMethod( context, methodName, ex, 
unwrappedFormBean );
 
         if ( method != null )
         {
@@ -319,7 +331,7 @@
                     
             if ( messageKey != null && messageKey.length() > 0 )
             {
-                message = getMessage( messageKey, null, null, request, 
servletContext, flowController );
+                message = getMessage( context, messageKey, null, null );
             }
                     
             return flowController.invokeExceptionHandler( method, ex, message, 
unwrappedFormBean,
@@ -343,21 +355,21 @@
                 err = Bundle.getString( "PageFlow_MissingExceptionHandler", 
methodName );
             }
                     
-            InternalUtils.sendError( "PageFlow_Custom_Error", null, request, 
response, servletContext, 
+            InternalUtils.sendError( "PageFlow_Custom_Error", null, request, 
response, getServletContext(), 
                                      flowController.getDisplayName(), err );
             return null;
         }        
     }
     
-    protected String getMessage( String messageKey, String bundle, Object[] 
args, HttpServletRequest request,
-                                 ServletContext servletContext, FlowController 
flowController )
+    protected String getMessage( FlowControllerHandlerContext context, String 
messageKey, String bundle, Object[] args )
     {
         if ( bundle == null ) bundle = Globals.MESSAGES_KEY;
         
+        ServletRequest request = context.getRequest();
         MessageResources resources = ( MessageResources ) 
request.getAttribute( bundle );
         if ( resources == null )
         {
-            resources = ( MessageResources ) servletContext.getAttribute( 
bundle );
+            resources = ( MessageResources ) getServletContext().getAttribute( 
bundle );
         }
 
         if ( resources == null )
@@ -366,7 +378,10 @@
             return null;
         }
 
-        Locale userLocale = FlowController.retrieveUserLocale( request, null );
+        Locale userLocale = 
+                request instanceof HttpServletRequest
+                ? FlowController.retrieveUserLocale( ( HttpServletRequest ) 
request, null )
+                : null;
     
         if ( args == null )
         {
@@ -378,8 +393,7 @@
         }
     }
     
-    public boolean eatUnhandledException( Throwable ex, HttpServletRequest 
request, HttpServletResponse response,
-                                          ServletContext servletContext )
+    public boolean eatUnhandledException( FlowControllerHandlerContext 
context, Throwable ex )
     {
         _log.error( "Unhandled Page Flow Exception", ex );
 
@@ -388,11 +402,11 @@
             //
             // PageFlowExceptions know what to do in the unhandled case.
             //
-            boolean prodMode = AdapterManager.getServletContainerAdapter( 
servletContext ).isInProductionMode();
+            boolean prodMode = AdapterManager.getServletContainerAdapter( 
getServletContext() ).isInProductionMode();
             
             if ( ! prodMode && ex instanceof PageFlowManagedObjectException  )
             {
-                ( ( PageFlowManagedObjectException ) ex ).sendError( request, 
response );
+                ( ( PageFlowManagedObjectException ) ex ).sendError( 
context.getRequest(), context.getResponse() );
                 return true;
             }
         }
@@ -411,11 +425,11 @@
      * @param ex the Exception that is to be handled.
      * @return the Method with the given name that handles the given 
Exception, or <code>null</code>
      *             if none matches.
-     * @exclude
      */ 
-    protected Method getExceptionHandlerMethod( String methodName, Throwable 
ex, Object formBean,
-                                                FlowController flowController )
+    protected Method getExceptionHandlerMethod( FlowControllerHandlerContext 
context, String methodName, Throwable ex,
+                                                Object formBean )
     {
+        FlowController flowController = context.getFlowController();
         String cacheKey = methodName + '/' + ex.getClass().getName();
         ClassLevelCache cache = ClassLevelCache.getCache( 
flowController.getClass() );
         Method method = ( Method ) cache.get( 
CACHEID_EXCEPTION_HANDLER_METHODS, cacheKey );
@@ -474,5 +488,10 @@
         }
         
         return null;
+    }
+    
+    public ExceptionsHandler getRegisteredHandler()
+    {
+        return ( ExceptionsHandler ) super.getRegisteredHandler();
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
 Sun Jan 30 22:58:37 2005
@@ -18,7 +18,7 @@
 package org.apache.beehive.netui.pageflow.internal;
 
 import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
-import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
 import org.apache.beehive.netui.pageflow.PageFlowStack;
 import org.apache.beehive.netui.util.logging.Logger;
 
@@ -26,6 +26,7 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.ServletException;
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
 import java.io.IOException;
 
 import org.apache.struts.upload.MultipartRequestWrapper;
@@ -41,22 +42,33 @@
     private static final Logger _log = Logger.getInstance( 
DefaultForwardRedirectHandler.class );
     
     
-    public void redirect( String uri, HttpServletRequest request, 
HttpServletResponse response )
+    public DefaultForwardRedirectHandler( ServletContext servletContext )
+    {
+        init( null, null, servletContext );
+    }
+    
+    public void redirect( FlowControllerHandlerContext context, String uri )
         throws IOException, ServletException
     {
+        assert context.getRequest() instanceof HttpServletResponse : "don't 
support ServletResponse currently.";
+        HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
         response.sendRedirect( response.encodeRedirectURL( uri ) );
     }
 
-    public void forward( String uri, HttpServletRequest request, 
HttpServletResponse response )
+    public void forward( FlowControllerHandlerContext context, String uri )
         throws IOException, ServletException
     {
-        ContextCache contextCache = ContextCache.get( getServletContext() );
+        LegacySettings settings = LegacySettings.get( getServletContext() );
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        assert context.getResponse() instanceof HttpServletResponse : "don't 
support ServletResponse currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
+        HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
         int requestCount = RequestValues.getForwardedRequestCount( request );
         
         //
         // See if we've exceeded the maximum number of forwards.
         //
-        int forwardOverflowCount = contextCache.getForwardOverflowCount();
+        int forwardOverflowCount = settings.getForwardOverflowCount();
         if ( requestCount > forwardOverflowCount )
         {
             InternalUtils.sendDevTimeError( "PageFlow_Forward_Overflow", null,
@@ -70,7 +82,7 @@
         //
         PageFlowStack pfStack = PageFlowStack.get( request, false );
         
-        int nestingOverflowCount = contextCache.getNestingOverflowCount();
+        int nestingOverflowCount = settings.getNestingOverflowCount();
         if ( pfStack != null && pfStack.size() > nestingOverflowCount )
         {
             InternalUtils.sendDevTimeError( "PageFlow_Nesting_Overflow", null,
@@ -107,6 +119,7 @@
             {
                 _log.error( "Could not get requestDispatcher for URI " + uri );
             }
+            
             response.sendError( HttpServletResponse.SC_NOT_FOUND );
             return;
         }

Added: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java?view=auto&rev=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java
 (added)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java
 Sun Jan 30 22:58:37 2005
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.pageflow.internal;
+
+import org.apache.beehive.netui.pageflow.handler.BaseHandler;
+import org.apache.beehive.netui.pageflow.handler.Handler;
+
+public class DefaultHandler
+        extends BaseHandler
+{
+    private Handler _registeredHandler;
+
+    public Handler getRegisteredHandler()
+    {
+        return _registeredHandler;
+    }
+
+    public void setRegisteredHandler( Handler registeredHandler )
+    {
+        _registeredHandler = registeredHandler;
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
 Sun Jan 30 22:58:37 2005
@@ -18,8 +18,11 @@
 package org.apache.beehive.netui.pageflow.internal;
 
 import org.apache.beehive.netui.pageflow.handler.LoginHandler;
+import org.apache.beehive.netui.pageflow.handler.BaseHandler;
+import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
 
 import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.security.auth.login.LoginException;
@@ -32,30 +35,43 @@
  */ 
 public class DefaultLoginHandler
         extends DefaultHandler
-        implements LoginHandler, Serializable
+        implements LoginHandler
 {
-    public void init( ServletContext servletContext )
+    public DefaultLoginHandler( ServletContext servletContext )
     {
+        init( null, null, servletContext );
     }
 
-    public void login( String username, String password, HttpServletRequest 
request, HttpServletResponse response )
+    public void login( FlowControllerHandlerContext context, String username, 
String password )
         throws LoginException
     {
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        assert context.getResponse() instanceof HttpServletResponse : "don't 
support ServletResponse currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
+        HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
         AdapterManager.getServletContainerAdapter( getServletContext() 
).login( username, password, request, response );
     }
 
-    public void logout( boolean invalidateSessions, HttpServletRequest 
request, HttpServletResponse response )
+    public void logout( FlowControllerHandlerContext context, boolean 
invalidateSessions )
     {
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        assert context.getResponse() instanceof HttpServletResponse : "don't 
support ServletResponse currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
+        HttpServletResponse response = ( HttpServletResponse ) 
context.getResponse();
         AdapterManager.getServletContainerAdapter( getServletContext() 
).logout( invalidateSessions, request, response );
     }
 
-    public boolean isUserInRole( String roleName, HttpServletRequest request )
+    public boolean isUserInRole( FlowControllerHandlerContext context, String 
roleName )
     {
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
         return request.isUserInRole( roleName );
     }
 
-    public Principal getUserPrincipal( HttpServletRequest request )
+    public Principal getUserPrincipal( FlowControllerHandlerContext context )
     {
+        assert context.getRequest() instanceof HttpServletRequest : "don't 
support ServletRequest currently.";
+        HttpServletRequest request = ( HttpServletRequest ) 
context.getRequest();
         return request.getUserPrincipal();
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
 Sun Jan 30 22:58:37 2005
@@ -19,13 +19,13 @@
 
 import org.apache.beehive.netui.pageflow.AutoRegisterActionServlet;
 import org.apache.beehive.netui.pageflow.ServletContainerAdapter;
+import org.apache.beehive.netui.pageflow.RequestContext;
 import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
 import org.apache.beehive.netui.util.classloader.BouncyClassLoader;
 import org.apache.beehive.netui.util.cache.ClassLevelCache;
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.util.DiscoveryUtils;
 
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import javax.servlet.ServletContext;
 import java.util.Enumeration;
@@ -44,10 +44,9 @@
     
     private BouncyClassLoader _pageFlowClassLoader = null;
     
-    
-    public void init( ServletContext servletContext )
+    public DefaultReloadableClassHandler( ServletContext servletContext )
     {
-        super.init( servletContext );
+        init( null, null, servletContext );
         
         // This feature is disabled for now.
         if ( false )
@@ -78,7 +77,7 @@
     public Object newInstance( String className )
         throws ClassNotFoundException, InstantiationException, 
IllegalAccessException
     {
-        return loadClass( className ).newInstance();
+        return getRegisteredHandler().loadClass( className ).newInstance();
     }
     
     private static Map< String, Class > _loadedClasses = new 
ConcurrentHashMap< String, Class >();
@@ -97,7 +96,7 @@
         {
             try
             {
-                clazz = loadClass( className );
+                clazz = getRegisteredHandler().loadClass( className );
                 _loadedClasses.put( className, clazz );
                 return clazz;
             }
@@ -125,7 +124,7 @@
         }
     }
     
-    public void reinit( HttpServletRequest request )
+    public void reloadClasses( RequestContext context )
     {
         if ( _pageFlowClassLoader == null )
         {
@@ -142,7 +141,7 @@
                 // First go through the session and remove any attributes 
whose classes were loaded by the stale
                 // classloader.
                 //
-                HttpSession session = request.getSession( false );
+                HttpSession session = InternalUtils.getHttpSession( 
context.getRequest(), false );
                 
                 if ( session != null )
                 {
@@ -181,7 +180,7 @@
                 //
                 // Bounce the classloader.
                 //
-                init( getServletContext() );
+                init( getConfig(), getPreviousHandler(), getServletContext() );
             }
         }
     }
@@ -202,5 +201,10 @@
     public boolean isReloadEnabled()
     {
         return _pageFlowClassLoader != null;
+    }
+    
+    public ReloadableClassHandler getRegisteredHandler()
+    {
+        return ( ReloadableClassHandler ) super.getRegisteredHandler();
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java
 Sun Jan 30 22:58:37 2005
@@ -22,6 +22,7 @@
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.pageflow.FacesBackingBean;
 import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
 import org.apache.beehive.netui.util.FileUtils;
 import org.apache.beehive.netui.util.logging.Logger;
 
@@ -56,7 +57,7 @@
             try
             {
                 Class backingClass =
-                    ContextCache.get( servletContext 
).getReloadableClassHandler().loadCachedClass( backingClassName );
+                    Handlers.get( servletContext 
).getReloadableClassHandler().loadCachedClass( backingClassName );
                 
                 if ( backingClass == null )
                 {

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
 Sun Jan 30 22:58:37 2005
@@ -20,6 +20,7 @@
 import org.apache.beehive.netui.core.urls.URLRewriterService;
 import org.apache.beehive.netui.pageflow.*;
 import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
 import org.apache.beehive.netui.pageflow.config.PageFlowControllerConfig;
 import org.apache.beehive.netui.pageflow.config.PageFlowActionMapping;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
@@ -35,6 +36,7 @@
 import javax.servlet.ServletContext;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletException;
+import javax.servlet.ServletResponse;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.lang.reflect.Method;
@@ -81,7 +83,7 @@
      * If not in production mode, write an error to the response; otherwise, 
set a response error code.
      */ 
     public static void sendDevTimeError( String messageKey, Throwable cause, 
int productionTimeErrorCode,
-                                         HttpServletRequest request, 
HttpServletResponse response,
+                                         ServletRequest request, 
ServletResponse response,
                                          ServletContext servletContext, Object 
... messageArgs )
             throws IOException
     {
@@ -92,49 +94,54 @@
      * If not in production mode, write an error to the response; otherwise, 
set a response error code.
      */ 
     public static void sendDevTimeError( String messageKey, Object[] 
messageArgs, Throwable cause,
-                                         int productionTimeErrorCode, 
HttpServletRequest request,
-                                         HttpServletResponse response, 
ServletContext servletContext )
+                                         int productionTimeErrorCode, 
ServletRequest request,
+                                         ServletResponse response, 
ServletContext servletContext )
             throws IOException
     {
         boolean prodMode = AdapterManager.getServletContainerAdapter( 
servletContext ).isInProductionMode();
+        boolean avoidDirectResponseOutput = 
RequestValues.avoidDirectResponseOutput( request );
         
-        if ( prodMode && ! RequestValues.avoidDirectResponseOutput( request ) )
+        if ( prodMode && ! avoidDirectResponseOutput && response instanceof 
HttpServletResponse )
         {
             if ( _log.isErrorEnabled() )
             {
                 _log.error( "Error (message key " + messageKey + ") occurred.  
Response error was set to "
                             + productionTimeErrorCode, cause );
             }
-            response.sendError( productionTimeErrorCode );
+            
+            ( ( HttpServletResponse ) response ).sendError( 
productionTimeErrorCode );
         }
         else
         {
-            sendError( messageKey, messageArgs, request, response, cause );
+            sendError( messageKey, messageArgs, request, response, cause, 
prodMode || avoidDirectResponseOutput );
         }
     }
     
     /**
      * Write an error to the response.
      */ 
-    public static void sendError( String messageKey, Throwable cause, 
HttpServletRequest request,
+    public static void sendError( String messageKey, Throwable cause, 
ServletRequest request,
                                   HttpServletResponse response, Object ... 
messageArgs )
             throws IOException
     {
-        sendError( messageKey, messageArgs, request, response, cause );
+        // TODO: the following null check will be unnecessary once the 
deprecated 
+        // FlowController.sendError(String, HttpServletResponse) is removed.
+        boolean avoidDirectResponseOutput = request != null ? 
RequestValues.avoidDirectResponseOutput( request ) : false;
+        sendError( messageKey, messageArgs, request, response, cause, 
avoidDirectResponseOutput );
     }
     
     /**
      * Write an error to the response.
      */ 
-    public static void sendError( String messageKey, Object[] messageArgs, 
HttpServletRequest request, 
-                                  HttpServletResponse response, Throwable 
cause )
+    public static void sendError( String messageKey, Object[] messageArgs, 
ServletRequest request, 
+                                  ServletResponse response, Throwable cause, 
boolean avoidDirectResponseOutput )
             throws IOException
     {
         assert messageArgs.length == 0 || ! ( messageArgs[0] instanceof 
Object[] )
                 : "Object[] passed to sendError; this is probably a mistaken 
use of varargs";
         
         // request may be null because of deprecated 
FlowController.sendError().
-        if ( request != null && RequestValues.avoidDirectResponseOutput( 
request ) )
+        if ( request != null && avoidDirectResponseOutput )
         {
             String baseMessage = Bundle.getString( messageKey + "_Message", 
messageArgs );
             throw new ResponseOutputException( baseMessage, cause );
@@ -287,12 +294,12 @@
     
     public static String getDecodedURI( HttpServletRequest request )
     {
-        return request.getContextPath() + request.getServletPath();     // 
TODO: is this always decoded?
+        return request.getContextPath() + request.getServletPath();
     }
     
     public static String getDecodedServletPath( HttpServletRequest request )
     {
-        return request.getServletPath();    // TODO: is this always decoded 
under all containers?
+        return request.getServletPath();
     }
         
     public static void addActionOutputs( Map toAdd, ServletRequest request, 
boolean overwrite )
@@ -323,23 +330,23 @@
         }
     }
     
-    public static void addActionMessage( String propertyName, ActionMessage 
error, ServletRequest request )
+    public static void addActionError( String propertyName, ActionMessage 
error, ServletRequest request )
     {
         ActionErrors errors = ( ActionErrors ) request.getAttribute( 
Globals.ERROR_KEY );
         if ( errors == null ) request.setAttribute( Globals.ERROR_KEY, errors 
= new ActionErrors() );
         errors.add( propertyName, error );
     }
     
-    public static Object newReloadableInstance( String className, 
HttpServletRequest request, ServletContext servletContext )
+    public static Object newReloadableInstance( String className, 
ServletContext servletContext )
         throws ClassNotFoundException, InstantiationException, 
IllegalAccessException
     {
-        return getReloadableClass( className, request, servletContext 
).newInstance();
+        return getReloadableClass( className, servletContext ).newInstance();
     }
     
-    public static Class getReloadableClass( String className, 
HttpServletRequest request, ServletContext servletContext )
+    public static Class getReloadableClass( String className, ServletContext 
servletContext )
         throws ClassNotFoundException
     {
-        ReloadableClassHandler handler = ContextCache.get( servletContext 
).getReloadableClassHandler();
+        ReloadableClassHandler handler = Handlers.get( servletContext 
).getReloadableClassHandler();
         return handler.loadClass( className );
     }
     
@@ -451,66 +458,13 @@
         return ( Map ) request.getAttribute( BINDING_UPDATE_ERRORS_ATTR );
     }
     
-    /**
-     * Print parameters and attributes in the given request.
-     * 
-     * @param request the current HttpServletRequest.
-     * @param output a PrintStream to which to output request parameters and 
request/session
-     *            attributes; if <code>null</null>, <code>System.err</code> is 
used.
-     * 
-     */
-    public static void dumpRequest( HttpServletRequest request, PrintStream 
output )
-    {
-        if ( output == null ) output = System.err;
-        output.println( "*** HttpServletRequest " + request );
-        output.println( "        uri = " + request.getRequestURI() );
-
-        for ( Enumeration e = request.getParameterNames(); 
e.hasMoreElements(); )
-        {
-            String name = ( String ) e.nextElement();
-            output.println( "            parameter " + name + " = " + 
request.getParameter( name ) );
-        }
-
-        for ( Enumeration e = request.getAttributeNames(); 
e.hasMoreElements(); )
-        {
-            String name = ( String ) e.nextElement();
-            output.println( "            attribute " + name + " = " + 
request.getAttribute( name ) );
-        }
-
-        for ( Enumeration e = request.getSession().getAttributeNames(); 
e.hasMoreElements(); )
-        {
-            String name = ( String ) e.nextElement();
-            output.println( "            session attribute " + name + " = " + 
request.getSession().getAttribute( name ) );
-        }
-    }
-
-    /**
-     * Print attributes in the given ServletContext.
-     * 
-     * @param context the current ServletContext.
-     * @param output a PrintStream to which to output ServletContext 
attributes; if <code>null</null>,
-     *               <code>System.err</code> is used.
-     */
-    public static void dumpServletContext( ServletContext context, PrintStream 
output )
-    {
-        if ( output == null ) output = System.err;
-        output.println( "*** ServletContext " + context );
-
-        for ( Enumeration e = context.getAttributeNames(); 
e.hasMoreElements(); )
-        {
-            String name = ( String ) e.nextElement();
-            output.println( "            attribute " + name + " = " + 
context.getAttribute( name ) );
-        }
-    }
-    
     public static void setCurrentModule( ModuleConfig mc, ServletRequest 
request )
     {
         request.setAttribute( Globals.MODULE_KEY, mc );
     }
     
-    public static ActionForm createActionForm( HttpServletRequest request, 
ActionMapping mapping,
-                                               ModuleConfig moduleConfig, 
ActionServlet actionServlet,
-                                               ServletContext servletContext )
+    public static ActionForm createActionForm( ActionMapping mapping, 
ModuleConfig moduleConfig,
+                                               ActionServlet actionServlet, 
ServletContext servletContext )
     {
         String formName = mapping.getName();
         if ( formName == null ) return null;
@@ -539,7 +493,7 @@
                     _log.debug( "Creating new ActionForm instance of type " + 
config.getType() );
                 }
                 
-                bean = ( ActionForm ) newReloadableInstance( config.getType(), 
request, servletContext );
+                bean = ( ActionForm ) newReloadableInstance( config.getType(), 
servletContext );
             }
             
             bean.setServlet( actionServlet );
@@ -561,7 +515,7 @@
      * tags will have access to it.
      */
     public static void setFormInScope( String formName, ActionForm form, 
ActionMapping mapping,
-                                HttpServletRequest request, boolean overwrite )
+                                       HttpServletRequest request, boolean 
overwrite )
     {
         if ( formName != null && form != null )
         {
@@ -589,7 +543,7 @@
         return ( mapping.getScope() == null || mapping.getScope().equals( 
"session" ) );
     }
     
-    public static ActionForm getFormBean( ActionMapping mapping, 
HttpServletRequest request )
+    public static ActionForm getFormBean( ActionMapping mapping, 
ServletRequest request )
     {
         String formBeanName = mapping.getName();
         
@@ -597,7 +551,8 @@
         {
             if ( isSessionScope( mapping ) )
             {
-                return ( ActionForm ) request.getSession().getAttribute( 
formBeanName );
+                HttpSession session = getHttpSession( request, false );
+                return session != null ? ( ActionForm ) session.getAttribute( 
formBeanName ) : null;
             }
             else
             {
@@ -649,7 +604,7 @@
         return getSharedFlowClassNameForRelativeURI( getDecodedServletPath( 
request ), request, servletContext );
     }    
     
-    public static String getSharedFlowClassNameForRelativeURI( String 
relativeURI, HttpServletRequest request,
+    public static String getSharedFlowClassNameForRelativeURI( String 
relativeURI, ServletRequest request,
                                                                ServletContext 
servletContext )
     {
         String cachedInRequest = ( String ) request.getAttribute( 
SHARED_FLOW_CLASSNAME_ATTR );
@@ -690,7 +645,7 @@
                                                     HttpServletResponse 
response, ServletContext servletContext )
         throws ClassNotFoundException
     {
-        Class fcClass = getReloadableClass( fcClassName, request, 
servletContext );
+        Class fcClass = getReloadableClass( fcClassName, servletContext );
         return getFlowController( fcClass, request, response, servletContext );
     }
     
@@ -760,7 +715,7 @@
         }
     }
     
-    public static boolean isMultipartHandlingEnabled( HttpServletRequest 
request )
+    public static boolean isMultipartHandlingEnabled( ServletRequest request )
     {
         ModuleConfig moduleConfig = ( ModuleConfig ) request.getAttribute( 
Globals.MODULE_KEY );
         return moduleConfig.getControllerConfig().getMultipartClass() != null;
@@ -772,17 +727,23 @@
         return pfConfig != null ? pfConfig.getMultipartHandler() : null;
     }
     
-    public static void setServletContext( HttpServletRequest request, 
ServletContext servletContext )
+    public static void setServletContext( ServletRequest request, 
ServletContext servletContext )
     {
-        ScopedServletUtils.getOuterRequest( request ).setAttribute( 
SERVLET_CONTEXT_ATTR, servletContext );
+        ScopedServletUtils.getOuterServletRequest( request ).setAttribute( 
SERVLET_CONTEXT_ATTR, servletContext );
     }
     
-    public static ServletContext getServletContext( HttpServletRequest request 
)
+    public static ServletContext getServletContext( ServletRequest req )
     {
-        HttpSession session = request.getSession( false );
+        HttpSession session = getHttpSession( req, false );
         return session != null
-               ? session.getServletContext()
-               : ( ServletContext ) ScopedServletUtils.getOuterRequest( 
request ).getAttribute( SERVLET_CONTEXT_ATTR ); 
+            ? session.getServletContext()
+            : ( ServletContext ) ScopedServletUtils.getOuterServletRequest( 
req ).getAttribute( SERVLET_CONTEXT_ATTR ); 
+    }
+    
+    public static HttpSession getHttpSession( ServletRequest request, boolean 
create )
+    {
+        if ( ! ( request instanceof HttpServletRequest ) ) return null;
+        return ( ( HttpServletRequest ) request ).getSession( create );
     }
 
     public static String createActionURL( HttpServletRequest servletRequest, 
String qualifiedAction )
@@ -800,7 +761,7 @@
         return qualifiedAction;
     }
 
-    public static String createActionPath( HttpServletRequest request, String 
qualifiedAction )
+    public static String createActionPath( ServletRequest request, String 
qualifiedAction )
     {
         ModuleConfig appConfig = ( ModuleConfig ) request.getAttribute( 
Globals.MODULE_KEY );
         if ( appConfig != null )
@@ -943,12 +904,12 @@
         return actionName;
     }
     
-    public static ActionMapping getCurrentActionMapping( HttpServletRequest 
request )
+    public static ActionMapping getCurrentActionMapping( ServletRequest 
request )
     {
         return ( ActionMapping ) request.getAttribute( Globals.MAPPING_KEY );
     }
     
-    public static ActionForm getCurrentActionForm( HttpServletRequest request )
+    public static ActionForm getCurrentActionForm( ServletRequest request )
     {
         ActionMapping mapping = getCurrentActionMapping( request );
         String attribute = mapping != null ? mapping.getAttribute() : null;
@@ -960,19 +921,23 @@
         }
         else
         {
-            HttpSession session = request.getSession( false );
+            HttpSession session = getHttpSession( request, false );
             return session != null ? ( ActionForm ) session.getAttribute( 
attribute ) : null;
         }
     }
     
-    public static boolean sessionExpired( HttpServletRequest request )
+    public static boolean sessionExpired( ServletRequest servletRequest )
     {
-        String requestedSessionID = request.getRequestedSessionId();
-
-        if ( requestedSessionID != null )
+        if ( servletRequest instanceof HttpServletRequest )
         {
-            HttpSession session = request.getSession( false );
-            return session == null || ! requestedSessionID.equals( 
session.getId() );
+            HttpServletRequest request = ( HttpServletRequest ) servletRequest;
+            String requestedSessionID = request.getRequestedSessionId();
+    
+            if ( requestedSessionID != null )
+            {
+                HttpSession session = request.getSession( false );
+                return session == null || ! requestedSessionID.equals( 
session.getId() );
+            }
         }
         
         return false;
@@ -983,7 +948,7 @@
         throwPageFlowException( ex, null );
     }
     
-    public static void throwPageFlowException( PageFlowException effect, 
HttpServletRequest request )
+    public static void throwPageFlowException( PageFlowException effect, 
ServletRequest request )
             throws PageFlowException
     {
         if ( request != null && effect.causeMayBeSessionExpiration() && 
sessionExpired( request ) )

Copied: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/LegacySettings.java
 (from r148858, 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java)
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/LegacySettings.java?view=diff&rev=149229&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java&r1=148858&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/LegacySettings.java&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/LegacySettings.java
 Sun Jan 30 22:58:37 2005
@@ -19,16 +19,9 @@
 
 import org.apache.beehive.netui.util.logging.Logger;
 import org.apache.beehive.netui.util.config.ConfigUtil;
-import org.apache.beehive.netui.util.config.bean.NetuiConfigDocument;
-import org.apache.beehive.netui.util.config.bean.PageflowHandlers;
 import org.apache.beehive.netui.util.config.bean.PageflowConfig;
 import org.apache.beehive.netui.pageflow.PageFlowActionServlet;
 import org.apache.beehive.netui.pageflow.PageFlowContextListener;
-import org.apache.beehive.netui.pageflow.handler.LoginHandler;
-import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
-import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
-import org.apache.beehive.netui.pageflow.handler.Handler;
-import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
 
 import javax.servlet.ServletContext;
 import java.io.Serializable;
@@ -36,15 +29,11 @@
 import static org.apache.beehive.netui.pageflow.PageFlowConstants.*;
 
 
-public class ContextCache implements Serializable
+public class LegacySettings implements Serializable
 {
-    private static final Logger _log = Logger.getInstance( ContextCache.class 
);
+    private static final Logger _log = Logger.getInstance( 
LegacySettings.class );
     
-    private static final String CACHE_ATTR = InternalConstants.ATTR_PREFIX + 
"_cache";
-    private static final String DEFAULT_LOGIN_HANDLER_CLASS = 
DefaultLoginHandler.class.getName();
-    private static final String DEFAULT_FWD_REDIRECT_HANDLER_CLASS = 
DefaultForwardRedirectHandler.class.getName();
-    private static final String DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS = 
DefaultReloadableClassHandler.class.getName();
-    private static final String DEFAULT_EXCEPTIONS_HANDLER_CLASS = 
DefaultExceptionsHandler.class.getName();
+    private static final String CONTEXT_ATTR = InternalConstants.ATTR_PREFIX + 
"_cache";
     private static final int DEFAULT_MAX_FORWARDS_PER_REQUEST = 25;
     private static final int DEFAULT_MAX_NESTING_STACK_DEPTH = 10;
     
@@ -54,37 +43,12 @@
     private int _forwardOverflowCount;
     private int _nestingOverflowCount;
     
-    private ForwardRedirectHandler _forwardRedirectHandler = null;
-    private LoginHandler _loginHandler = null;
-    private ReloadableClassHandler _reloadableClassHandler = null;
-    private ExceptionsHandler _exceptionsHandler = null;
-
-    
-    public ForwardRedirectHandler getForwardRedirectHandler()
-    {
-        return _forwardRedirectHandler;
-    }
-    
-    public LoginHandler getLoginHandler()
-    {
-        return _loginHandler;
-    }
-    
-    public ReloadableClassHandler getReloadableClassHandler()
-    {
-        return _reloadableClassHandler;
-    }
-    
-    public ExceptionsHandler getExceptionsHandler()
-    {
-        return _exceptionsHandler;
-    }
     
-    public static ContextCache get( ServletContext servletContext )
+    public static LegacySettings get( ServletContext servletContext )
     {
-        ContextCache cache = ( ContextCache ) servletContext.getAttribute( 
CACHE_ATTR );
+        LegacySettings ls = ( LegacySettings ) servletContext.getAttribute( 
CONTEXT_ATTR );
         
-        if ( cache == null )
+        if ( ls == null )
         {
             if ( _log.isErrorEnabled() )
             {
@@ -100,22 +64,14 @@
             return init( servletContext );
         }
         
-        cache.reinit( servletContext );       
-        return cache;
-    }
-    
-    private void reinit( ServletContext servletContext )
-    {
-        _exceptionsHandler.reinit( servletContext );
-        _forwardRedirectHandler.reinit( servletContext );
-        _loginHandler.reinit( servletContext );
-        _reloadableClassHandler.reinit( servletContext );
+        return ls;
     }
     
-    public static ContextCache init( ServletContext servletContext )
+    public static LegacySettings init( ServletContext servletContext )
     {
-        ContextCache cache = new ContextCache( servletContext );
-        servletContext.setAttribute( CACHE_ATTR, cache );
+        assert servletContext.getAttribute( CONTEXT_ATTR ) == null : 
LegacySettings.class.getName() + " already initialized.";
+        LegacySettings cache = new LegacySettings( servletContext );
+        servletContext.setAttribute( CONTEXT_ATTR, cache );
         return cache;
     }
     
@@ -168,7 +124,7 @@
         
         
     }
-    private ContextCache( ServletContext servletContext )
+    private LegacySettings( ServletContext servletContext )
     {
         //
         // Try loading some settings (max-forwards-per-requst, 
max-nesting-stack-depth, ensure-secure-forwards) from
@@ -176,88 +132,6 @@
         //
         loadLegacySettings( servletContext );
         
-        //
-        // Load/create Handlers.
-        //
-        NetuiConfigDocument.NetuiConfig netuiConfig = ConfigUtil.getConfig();
-        PageflowHandlers handlers = netuiConfig.getPageflowHandlers();
-        
-        if ( handlers != null )
-        {
-            _loginHandler = ( LoginHandler ) getHandlerInstance(
-                    handlers.getLoginHandlerClass(), 
DEFAULT_LOGIN_HANDLER_CLASS, LoginHandler.class, servletContext );
-            
-            _forwardRedirectHandler = ( ForwardRedirectHandler ) 
getHandlerInstance(
-                    handlers.getForwardRedirectHandlerClass(), 
DEFAULT_FWD_REDIRECT_HANDLER_CLASS,
-                    ForwardRedirectHandler.class, servletContext );
-            
-            _reloadableClassHandler = ( ReloadableClassHandler ) 
getHandlerInstance(
-                    handlers.getReloadableClassHandlerClass(), 
DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS,
-                    ReloadableClassHandler.class, servletContext );
-            
-            _exceptionsHandler = ( ExceptionsHandler ) getHandlerInstance(
-                    handlers.getExceptionsHandlerClass(), 
DEFAULT_EXCEPTIONS_HANDLER_CLASS,
-                    ExceptionsHandler.class, servletContext );
-        }
-        else
-        {
-            _loginHandler = ( LoginHandler ) getHandlerInstance(
-                    DEFAULT_LOGIN_HANDLER_CLASS, null, LoginHandler.class, 
servletContext );
-            
-            _forwardRedirectHandler = ( ForwardRedirectHandler ) 
getHandlerInstance(
-                    DEFAULT_FWD_REDIRECT_HANDLER_CLASS, null, 
ForwardRedirectHandler.class, servletContext );
-            
-            _reloadableClassHandler = ( ReloadableClassHandler ) 
getHandlerInstance(
-                    DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS, null, 
ReloadableClassHandler.class, servletContext );
-            
-            _exceptionsHandler = ( ExceptionsHandler ) getHandlerInstance(
-                    DEFAULT_EXCEPTIONS_HANDLER_CLASS, null, 
ExceptionsHandler.class, servletContext );
-        }
-    }
-    
-    private Handler getHandlerInstance( String className, String 
alternateClassName, Class desiredClass,
-                                        ServletContext servletContext )
-    {
-        if ( className != null )
-        {
-            _log.info( "Loading handler class " + className );
-            
-            try
-            {
-                Object instance = Class.forName( className ).newInstance();
-                
-                if ( desiredClass.isInstance( instance ) )
-                {
-                    Handler handlerInstance = ( Handler ) instance;
-                    handlerInstance.init( servletContext );
-                    return handlerInstance;
-                }
-                else
-                {
-                    _log.error( "Handler instance is of wrong type; expected " 
+ desiredClass.getName()
-                                + ", got " + instance.getClass().getName() );
-                }
-            }
-            catch ( ClassNotFoundException e )
-            {
-                _log.error( "Could not find Handler class " + className, e );
-            }
-            catch ( InstantiationException e )
-            {
-                _log.error( "Could not instantiate Handler of type " + 
className, e );
-            }
-            catch ( IllegalAccessException e )
-            {
-                _log.error( "Could not instantiate Handler of type " + 
className, e );
-            }
-        }
-        
-        if ( alternateClassName != null )
-        {
-            return getHandlerInstance( alternateClassName, null, desiredClass, 
servletContext );
-        }
-        
-        return null;
     }
     
     public boolean shouldDoSecureForwards()

Modified: 
incubator/beehive/trunk/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/scoping/org/apache/beehive/netui/pageflow/scoping/ScopedServletUtils.java
 Sun Jan 30 22:58:37 2005
@@ -211,6 +211,19 @@
     }
     
     /**
+     * Get the outer (unwrapped) request.
+     * 
+     * @param request the request to unwrap.
+     * @return the outer request, if the given request is a ScopedRequest (or 
wraps a ScopedRequest);
+     *         otherwise, the given request itself.
+     */ 
+    public static ServletRequest getOuterServletRequest( ServletRequest 
request )
+    {
+        ScopedRequest scopedRequest = unwrapRequest( request );
+        return scopedRequest != null ? scopedRequest.getOuterRequest() : 
request;
+    }
+    
+    /**
      * Unwraps the contained ScopedRequest from the given ServletRequest, 
which may be a
      * ServletRequestWrapper.
      * 

Modified: 
incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
 Sun Jan 30 22:58:37 2005
@@ -21,7 +21,8 @@
 import org.apache.beehive.netui.core.urls.URLRewriterService;
 import org.apache.beehive.netui.pageflow.FlowController;
 import org.apache.beehive.netui.pageflow.PageFlowUtils;
-import org.apache.beehive.netui.pageflow.internal.ContextCache;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
+import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
@@ -628,8 +629,8 @@
             if (_type != null) {
                 // Backwards compatibility - use explicitly specified values
                 try {
-                    ContextCache cc = 
ContextCache.get(pageContext.getServletContext());
-                    bean = 
cc.getReloadableClassHandler().newInstance(_beanType);
+                    Handlers handlers = 
Handlers.get(pageContext.getServletContext());
+                    bean = 
handlers.getReloadableClassHandler().newInstance(_beanType);
                     if (bean != null) {
                         ((ActionForm) bean).setServlet(_servlet);
                     }
@@ -648,8 +649,7 @@
                 }
 
                 if (bean == null) {
-                    bean = InternalUtils.createActionForm(request, _mapping, 
_appConfig, _servlet,
-                            servletContext);
+                    bean = InternalUtils.createActionForm(_mapping, 
_appConfig, _servlet, servletContext);
                 }
             }
 

Modified: 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/util/org/apache/beehive/netui/util/ServletUtils.java
 Sun Jan 30 22:58:37 2005
@@ -19,7 +19,10 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletRequest;
 import java.io.PrintStream;
 import java.util.Enumeration;
 
@@ -33,15 +36,19 @@
      *            attributes; if <code>null</null>, <code>System.err</code> is 
used.
      * 
      */
-    public static void dumpRequest( HttpServletRequest request, PrintStream 
output )
+    public static void dumpRequest( ServletRequest request, PrintStream output 
)
     {
         if ( output == null )
         {
             output = System.err;
         }
 
-        output.println( "*** HttpServletRequest " + request );
-        output.println( "        uri = " + request.getRequestURI() );
+        output.println( "*** ServletRequest " + request );
+        
+        if ( request instanceof HttpServletRequest )
+        {
+            output.println( "        uri = " + ( ( HttpServletRequest ) 
request ).getRequestURI() );
+        }
 
         for ( Enumeration e = request.getParameterNames(); 
e.hasMoreElements(); )
         {
@@ -55,10 +62,18 @@
             output.println( "            attribute " + name + " = " + 
request.getAttribute( name ) );
         }
 
-        for ( Enumeration e = request.getSession().getAttributeNames(); 
e.hasMoreElements(); )
+        if ( request instanceof HttpServletRequest )
         {
-            String name = ( String ) e.nextElement();
-            output.println( "            session attribute " + name + " = " + 
request.getSession().getAttribute( name ) );
+            HttpSession session = ( ( HttpServletRequest ) request 
).getSession( false );
+            
+            if ( session != null )
+            {
+                for ( Enumeration e = session.getAttributeNames(); 
e.hasMoreElements(); )
+                {
+                    String name = ( String ) e.nextElement();
+                    output.println( "            session attribute " + name + 
" = " + session.getAttribute( name ) );
+                }
+            }
         }
     }
 
@@ -89,13 +104,17 @@
     /**
      * Set response headers to prevent caching of the response by the browser.
      * 
-     * @param response the current HttpServletResponse
+     * @param response the current ServletResponse
      */ 
-    public static void preventCache( HttpServletResponse response )
+    public static void preventCache( ServletResponse response )
     {
-        response.setHeader( "Pragma", "No-cache" );
-        response.setDateHeader( "Expires", 0 );
-        response.setHeader( "Cache-Control", "no-cache" );
+        if ( response instanceof HttpServletResponse )
+        {
+            HttpServletResponse httpResponse = ( HttpServletResponse ) 
response;
+            httpResponse.setHeader( "Pragma", "No-cache" );
+            httpResponse.setDateHeader( "Expires", 0 );
+            httpResponse.setHeader( "Cache-Control", "no-cache" );
+        }
     }
     
     /**

Modified: 
incubator/beehive/trunk/netui/src/util/schema/netui-config/netui-config.xsd
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/util/schema/netui-config/netui-config.xsd?view=diff&r1=149228&r2=149229
==============================================================================
--- incubator/beehive/trunk/netui/src/util/schema/netui-config/netui-config.xsd 
(original)
+++ incubator/beehive/trunk/netui/src/util/schema/netui-config/netui-config.xsd 
Sun Jan 30 22:58:37 2005
@@ -74,12 +74,20 @@
         </xsd:sequence>
     </xsd:complexType>
        
+    <xsd:complexType name="handler">
+        <xsd:sequence>
+            <xsd:element name="handler-class" type="xsd:string" minOccurs="1" 
maxOccurs="1"/>
+            <xsd:element name="custom-property" type="netui:custom-property" 
minOccurs="0" maxOccurs="unbounded"/>
+        </xsd:sequence>
+    </xsd:complexType>
+    
     <xsd:complexType name="pageflow-handlers">
         <xsd:sequence>
-            <xsd:element name="login-handler-class" type="xsd:string" 
minOccurs="0" maxOccurs="1"/>
-            <xsd:element name="forward-redirect-handler-class" 
type="xsd:string" minOccurs="0" maxOccurs="1"/>
-            <xsd:element name="reloadable-class-handler-class" 
type="xsd:string" minOccurs="0" maxOccurs="1"/>
-            <xsd:element name="exceptions-handler-class" type="xsd:string" 
minOccurs="0" maxOccurs="1"/>
+            <xsd:element name="action-forward-handler" type="netui:handler" 
minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="exceptions-handler" type="netui:handler" 
minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="forward-redirect-handler" type="netui:handler" 
minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="login-handler" type="netui:handler" 
minOccurs="0" maxOccurs="unbounded"/>
+            <xsd:element name="reloadable-class-handler" type="netui:handler" 
minOccurs="0" maxOccurs="unbounded"/>
         </xsd:sequence>
     </xsd:complexType>
     

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/local-netui-config.xml
 Sun Jan 30 22:58:37 2005
@@ -114,7 +114,21 @@
     </pageflow-action-interceptors>
 
     <pageflow-handlers>
-        
<forward-redirect-handler-class>pageFlowCore.forwards.Controller$Redirector</forward-redirect-handler-class>
+        <action-forward-handler>
+            
<handler-class>miniTests.handlers.Controller$OverrideActionForwardHandler</handler-class>
+        </action-forward-handler>
+        <exceptions-handler>
+            
<handler-class>miniTests.handlers.Controller$OverrideExceptionsHandler</handler-class>
+        </exceptions-handler>
+        <forward-redirect-handler>
+            
<handler-class>pageFlowCore.forwards.Controller$FakeRedirector</handler-class>
+        </forward-redirect-handler>
+        <login-handler>
+            
<handler-class>miniTests.handlers.Controller$OverrideLoginHandler1</handler-class>
+        </login-handler>
+        <login-handler>
+            
<handler-class>miniTests.handlers.Controller$OverrideLoginHandler2</handler-class>
+        </login-handler>
     </pageflow-handlers>
 
     <pageflow-config>

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/Controller.jpf
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/Controller.jpf?view=auto&rev=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/Controller.jpf
 (added)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/Controller.jpf
 Sun Jan 30 22:58:37 2005
@@ -0,0 +1,187 @@
+package miniTests.handlers;
+
+import org.apache.beehive.netui.pageflow.*;
+import org.apache.beehive.netui.pageflow.handler.*;
+import org.apache.beehive.netui.pageflow.annotations.*;
+import org.apache.beehive.netui.pageflow.interceptor.action.*;
+import org.apache.struts.action.*;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import javax.security.auth.login.LoginException;
+import java.security.Principal;
+import org.apache.struts.config.ModuleConfig;
+
+
[EMAIL PROTECTED](
+    simpleActions={
+        @Jpf.SimpleAction(name="begin", path="index.jsp"),
+        @Jpf.SimpleAction(name="roleRequiredAction", path="index.jsp", 
rolesAllowed={ "HandlersTest" } )
+    }
+)
+public class Controller extends PageFlowController
+{
+    public String getActionForwardHandler()
+    {
+        return Handlers.get( getServletContext() 
).getActionForwardHandler().toString();
+    }
+
+    public String getExceptionsHandler()
+    {
+        return Handlers.get( getServletContext() 
).getExceptionsHandler().toString();
+    }
+
+    public String getLoginHandler()
+    {
+        return Handlers.get( getServletContext() 
).getLoginHandler().toString();
+    }
+
+    public static class OverrideActionForwardHandler
+        extends BaseHandler
+        implements ActionForwardHandler
+    {
+        public ActionForward doForward( FlowControllerHandlerContext context, 
ActionForward fwd, ActionMapping mapping, 
+                                        String actionName, ModuleConfig 
altModuleConfig, ActionForm form )
+        {
+            return getPreviousHandler().doForward( context, fwd, mapping, 
actionName, altModuleConfig, form );
+        }
+
+        public ActionForward doAutoViewRender( FlowControllerHandlerContext 
context, ActionMapping mapping, ActionForm form )
+        {
+            return getPreviousHandler().doAutoViewRender( context, mapping, 
form );
+        }
+
+        public ActionForward doReturnToPage( FlowControllerHandlerContext 
context, PreviousPageInfo prevPageInfo,
+                                      PageFlowController currentPageFlow, 
ActionForm currentForm,
+                                      String actionName, Forward pageFlowFwd )
+        {
+            return getPreviousHandler().doReturnToPage( context, prevPageInfo, 
currentPageFlow, currentForm, actionName, pageFlowFwd );
+        }
+
+        public ActionForward doReturnToAction( FlowControllerHandlerContext 
context, String actionName, Forward pageFlowFwd )
+        {
+            return getPreviousHandler().doReturnToAction( context, actionName, 
pageFlowFwd );
+        }
+
+        public ActionForward doNestingReturn( FlowControllerHandlerContext 
context, Forward pageFlowFwd, ActionMapping mapping,
+                                       ActionForm form )
+        {
+            return getPreviousHandler().doNestingReturn( context, pageFlowFwd, 
mapping, form );
+        }
+
+        public ActionForward handleInterceptorReturn( 
FlowControllerHandlerContext context, PageFlowController poppedPageFlow,
+                                               PageFlowStack.PushedPageFlow 
pushedPageFlowWrapper, String returnAction,
+                                               ActionMapping actionMapping, 
ActionForm form, ActionInterceptor interceptor )
+        {
+            return getPreviousHandler().handleInterceptorReturn( context, 
poppedPageFlow, pushedPageFlowWrapper, returnAction,
+                                                                 
actionMapping, form, interceptor );
+        }
+
+        protected ActionForwardHandler getPreviousHandler()
+        {
+            return ( ActionForwardHandler ) super.getPreviousHandler();
+        }
+
+        public String toString()
+        {
+            return getClass().getName() + " which is adapting " + 
getPreviousHandler().getClass().getName();
+        }
+    }
+
+    public static class OverrideExceptionsHandler
+        extends BaseHandler
+        implements ExceptionsHandler
+    {
+        public ActionForward handleException( FlowControllerHandlerContext 
context, Throwable ex, ActionMapping actionMapping,
+                                       ActionForm form )
+            throws IOException, ServletException
+        {
+            return getPreviousHandler().handleException( context, ex, 
actionMapping, form );
+        }
+
+        public Throwable unwrapException( FlowControllerHandlerContext 
context, Throwable ex )
+        {
+            return getPreviousHandler().unwrapException( context, ex );
+        }
+
+        public void exposeException( FlowControllerHandlerContext context, 
Throwable ex, ActionMapping actionMapping )
+        {
+            getPreviousHandler().exposeException( context, ex, actionMapping );
+        }
+
+        public boolean eatUnhandledException( FlowControllerHandlerContext 
context, Throwable ex )
+        {
+            return getPreviousHandler().eatUnhandledException( context, ex );
+        }
+
+        protected ExceptionsHandler getPreviousHandler()
+        {
+            return ( ExceptionsHandler ) super.getPreviousHandler();
+        }
+
+        public String toString()
+        {
+            return getClass().getName() + " which is adapting " + 
getPreviousHandler().getClass().getName();
+        }
+    }
+
+    public static class OverrideLoginHandler1
+        extends BaseHandler
+        implements LoginHandler
+    {
+        public void login( FlowControllerHandlerContext context, String 
username, String password )
+            throws LoginException
+        {
+            getPreviousHandler().login( context, username, password );
+        }
+        
+        public void logout( FlowControllerHandlerContext context, boolean 
invalidateSessions )
+        {
+            getPreviousHandler().logout( context, invalidateSessions );
+        }
+        
+        public boolean isUserInRole( FlowControllerHandlerContext context, 
String roleName )
+        {
+            return getPreviousHandler().isUserInRole( context, roleName );
+        }
+        
+        public Principal getUserPrincipal( FlowControllerHandlerContext 
context )
+        {
+            return getPreviousHandler().getUserPrincipal( context );
+        }
+
+        protected LoginHandler getPreviousHandler()
+        {
+            return ( LoginHandler ) super.getPreviousHandler();
+        }
+
+        public String toString()
+        {
+            return getClass().getName() + " which is adapting " + 
getPreviousHandler().getClass().getName();
+        }
+    }
+
+    public static class OverrideLoginHandler2 extends OverrideLoginHandler1
+    {
+        public boolean isUserInRole( FlowControllerHandlerContext context, 
String roleName )
+        {
+            if ( roleName.equals( "HandlersTest" ) ) return true;
+            return getPreviousHandler().isUserInRole( context, roleName );
+        }
+
+        public Principal getUserPrincipal( FlowControllerHandlerContext 
context )
+        {
+            if ( ( ( HttpServletRequest ) context.getRequest() 
).getServletPath().startsWith( "/miniTests/handlers/" ) )
+            {
+                return new Principal(){ public String getName() { return 
"handler-temp-user"; } };
+            }
+
+            return getPreviousHandler().getUserPrincipal( context );
+        }
+
+        public String toString()
+        {
+            return getClass().getName() + " which is adapting " + 
getPreviousHandler().toString();
+        }
+    }
+}

Propchange: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/Controller.jpf
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/index.jsp
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/index.jsp?view=auto&rev=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/index.jsp
 (added)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/index.jsp
 Sun Jan 30 22:58:37 2005
@@ -0,0 +1,25 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+<%@ taglib prefix="netui-data" 
uri="http://beehive.apache.org/netui/tags-databinding-1.0"%>
+<%@ taglib prefix="netui-template" 
uri="http://beehive.apache.org/netui/tags-template-1.0"%>
+
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        action-forward-handler: <b>${pageFlow.actionForwardHandler}</b><br/>
+        exceptions-handler: <b>${pageFlow.exceptionsHandler}</b><br/>
+        login-handler: <b>${pageFlow.loginHandler}</b><br/>
+        <br/>
+        The following action normally requires the role "HandlerTest", but 
we've set a LoginHandler
+        to guarantee that we appear to be in that role.  If we return to this 
page, that means an
+        error was <i>not</i> thrown, i.e., this test succeeded.
+        <br/>
+        <netui:anchor action="roleRequiredAction">hit it</netui:anchor>
+    </netui:body>
+</netui:html>
+
+  
+

Propchange: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/handlers/index.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/mockportal/smokeTest/results.jsp
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/mockportal/smokeTest/results.jsp?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/mockportal/smokeTest/results.jsp
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/mockportal/smokeTest/results.jsp
 Sun Jan 30 22:58:37 2005
@@ -3,7 +3,7 @@
 <%@ taglib uri="beehive-netui-tags-html.tld" prefix="netui"%>
 <%@ taglib uri="beehive-netui-tags-template.tld" prefix="netui-template"%>
 <netui:html>
-<% org.apache.beehive.netui.pageflow.internal.InternalUtils.dumpRequest( 
request, null ); %>
+
     <head>
         <title>
             Mock Portal Smoke Test

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/pageFlowCore/forwards/Controller.jpf
 Sun Jan 30 22:58:37 2005
@@ -18,8 +18,7 @@
 package pageFlowCore.forwards;
 
 import org.apache.beehive.netui.pageflow.*;
-import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
-import org.apache.beehive.netui.pageflow.internal.DefaultHandler;
+import org.apache.beehive.netui.pageflow.handler.*;
 import org.apache.beehive.netui.pageflow.annotations.Jpf;
 import javax.servlet.http.*;
 import javax.servlet.*;
@@ -27,49 +26,23 @@
 import java.net.URI;
 
 
[EMAIL PROTECTED](
-    value = { 
-        "<!-- This data is auto-generated. Hand-editing this section is not 
recommended. -->", 
-        "<view-properties>", 
-        "<pageflow-object 
id='pageflow:/pageFlowCore/forwards/Controller.jpf'/>", 
-        "<pageflow-object id='formbean:Redirector'/>", 
-        "<pageflow-object id='action:begin.do'/>", 
-        "<pageflow-object id='action:redirect.do'/>", 
-        "<pageflow-object id='action:withQueryParams.do'/>", 
-        "<pageflow-object id='action:randomURI.do'/>", 
-        "<pageflow-object id='action:uriRedirect.do'/>", 
-        "<pageflow-object id='action:uriWebappForward.do'/>", 
-        "<pageflow-object id='action:uriRelativeForward.do'/>", 
-        "<pageflow-object id='action:uriRelativeRedirect.do'/>", 
-        "<pageflow-object id='action:setPath.do'/>", 
-        "<pageflow-object id='page:index.jsp'/>", 
-        "<pageflow-object id='forward:[EMAIL PROTECTED]:begin.do@'/>", 
-        "<pageflow-object id='forward:[EMAIL PROTECTED]:redirect.do@'/>", 
-        "<pageflow-object id='forward:[EMAIL 
PROTECTED]:withQueryParams.do@'/>", 
-        "<pageflow-object id='dangling-fwd-dest:@forward:[EMAIL 
PROTECTED]:setPath.do@@'/>", 
-        "<pageflow-object id='forward:[EMAIL PROTECTED]:setPath.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:uriRelativeRedirect.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:uriRelativeForward.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:uriWebappForward.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:uriRedirect.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:withQueryParams.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:randomURI.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:setPath.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:begin.do@'/>", 
-        "<pageflow-object id='action-call:@page:[EMAIL 
PROTECTED]@action:redirect.do@'/>", 
-        "</view-properties>"
-    }
-)
 @Jpf.Controller
 public class Controller extends PageFlowController
 {
-    public static class Redirector
-        extends 
org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHandler
+    public static class FakeRedirector
+        extends BaseHandler
+        implements ForwardRedirectHandler
     {
-        public void redirect( String uri, HttpServletRequest request, 
HttpServletResponse response )
+        public void forward( FlowControllerHandlerContext context, String uri )
             throws IOException, ServletException
         {
-            PrintWriter writer = response.getWriter();
+            ( ( ForwardRedirectHandler ) getPreviousHandler() ).forward( 
context, uri );
+        }
+
+        public void redirect( FlowControllerHandlerContext context, String uri 
)
+            throws IOException, ServletException
+        {
+            PrintWriter writer = context.getResponse().getWriter();
 
             writer.println( "<html><head><title>Fake 
Redirect</title></head><body>" );
             writer.println( "Fake redirect to: <b>" + uri + "</b><br><br>" );

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/addExpressionMessages/Controller.jpf
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/addExpressionMessages/Controller.jpf?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/addExpressionMessages/Controller.jpf
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/addExpressionMessages/Controller.jpf
 Sun Jan 30 22:58:37 2005
@@ -28,9 +28,9 @@
         getRequest().setAttribute( "requestMessage", "a message in the request 
with two arguments: {0} and {1}" );
         getSession().setAttribute( "sessionMessage", "a message in the 
session" );
 
-        addActionMessageExpression( "prop1", "${pageFlow.pageFlowMessage}" );
-        addActionMessageExpression( "prop2", "${requestScope.requestMessage}", 
"ARG1", "ARG2" );
-        addActionMessageExpression( "prop3", "${sessionScope.sessionMessage}" 
);
+        addActionErrorExpression( "prop1", "${pageFlow.pageFlowMessage}" );
+        addActionErrorExpression( "prop2", "${requestScope.requestMessage}", 
"ARG1", "ARG2" );
+        addActionErrorExpression( "prop3", "${sessionScope.sessionMessage}" );
 
         return new Forward( "index" );
     }

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?view=diff&r1=149228&r2=149229
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
 Sun Jan 30 22:58:37 2005
@@ -3417,6 +3417,19 @@
          </features>
       </test>
       <test>
+         <name>Handlers</name>
+         <description>Sanity check test of handlers, which are registered in 
netui-config.xml.  Tests the ability to define and "chain" (by adapting) 
handlers.</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>bvt.struts11</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Handlers</feature>
+         </features>
+      </test>
+      <test>
          <name>Hidden</name>
          <description>Verify that the dataInput attribute works on the Hidden 
tag.</description>
          <webapp>coreWeb</webapp>


Reply via email to