You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by sy...@apache.org on 2004/04/25 14:12:09 UTC

cvs commit: cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/validation/impl JavaScriptValidator.java

sylvain     2004/04/25 05:12:09

  Modified:    .        status.xml
               src/java/org/apache/cocoon/components/flow FlowHelper.java
               src/java/org/apache/cocoon/components/flow/javascript/fom
                        FOM_Cocoon.java FOM_JavaScriptFlowHelper.java
                        FOM_JavaScriptInterpreter.java
               src/blocks/javaflow/java/org/apache/cocoon/components/flow/java
                        AbstractContinuable.java
               src/blocks/javaflow/java/org/apache/cocoon/forms/flow/java
                        FormInstance.java
               src/blocks/woody/java/org/apache/cocoon/woody/binding
                        JavaScriptJXPathBinding.java
               src/blocks/woody/java/org/apache/cocoon/woody/event/impl
                        JavaScriptWidgetListener.java
               src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript
                        woody2.js
               src/blocks/woody/java/org/apache/cocoon/woody/util
                        JavaScriptHelper.java
               src/blocks/woody/java/org/apache/cocoon/woody/validation/impl
                        JavaScriptValidator.java
               src/blocks/forms/java/org/apache/cocoon/forms/binding
                        JavaScriptJXPathBinding.java
               src/blocks/forms/java/org/apache/cocoon/forms/event/impl
                        JavaScriptWidgetListener.java
               src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript
                        Form.js
               src/blocks/forms/java/org/apache/cocoon/forms/util
                        JavaScriptHelper.java
               src/blocks/forms/java/org/apache/cocoon/forms/validation/impl
                        JavaScriptValidator.java
  Log:
  Pass flow data through the object model rather than through request attributes to avoid to avoid these data to be overwritten by subrequests
  
  Revision  Changes    Path
  1.308     +6 -1      cocoon-2.1/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/status.xml,v
  retrieving revision 1.307
  retrieving revision 1.308
  diff -u -r1.307 -r1.308
  --- status.xml	24 Apr 2004 01:57:19 -0000	1.307
  +++ status.xml	25 Apr 2004 12:12:08 -0000	1.308
  @@ -212,6 +212,11 @@
     <changes>
   
    <release version="@version@" date="@date@">
  +   <action dev="SW" type="fix">
  +     Moved storage of all flow-related data (viewData, continuation, request, etc) from request
  +     attributes to object model entries. This allows a view called by sendPage() to also use
  +     flowscript (using request attributes caused the two calls to mix up their data).
  +   </action>
      <action dev="JH" type="fix">
        Hopefully fixed the source resolving in JSP components finally by using
        standard Cocoon/Avalon Excalibur source resolving. This allows to use all
  
  
  
  1.4       +15 -12    cocoon-2.1/src/java/org/apache/cocoon/components/flow/FlowHelper.java
  
  Index: FlowHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/FlowHelper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FlowHelper.java	5 Mar 2004 13:02:46 -0000	1.3
  +++ FlowHelper.java	25 Apr 2004 12:12:08 -0000	1.4
  @@ -15,8 +15,6 @@
    */
   package org.apache.cocoon.components.flow;
   
  -import org.apache.cocoon.environment.ObjectModelHelper;
  -import org.apache.cocoon.environment.Request;
   import org.mozilla.javascript.Undefined;
   import org.mozilla.javascript.Wrapper;
   
  @@ -29,15 +27,24 @@
    */
   public class FlowHelper {
   
  +    // Constants defining keys in the object model used to store the various objects.
  +    // These constants are private so that access to these objects only go through the
  +    // accessors provided below.
  +    //
  +    // These objects are stored in the object model rather than as request attributes,
  +    // as object model is cloned for subrequests (see EnvironmentWrapper), whereas
  +    // request attributes are shared between the "real" request and all of its
  +    // child requests.
  +
       /**
        * Request attribute name used to store flow context.
        */
  -    public static final String CONTEXT_OBJECT = "cocoon.flow.context";
  +    private static final String CONTEXT_OBJECT = "cocoon.flow.context";
   
       /**
        * Request attribute name used to store flow continuation.
        */
  -    public static final String CONTINUATION_OBJECT = "cocoon.flow.continuation";
  +    private static final String CONTINUATION_OBJECT = "cocoon.flow.continuation";
   
       /**
        * Get the flow context object associated with the current request
  @@ -46,8 +53,7 @@
        * @return The context object 
        */
       public final static Object getContextObject(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return request.getAttribute(CONTEXT_OBJECT);
  +        return objectModel.get(CONTEXT_OBJECT);
       }
   
       /**
  @@ -57,8 +63,7 @@
        * @return The web continuation
        */
       public final static WebContinuation getWebContinuation(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (WebContinuation)request.getAttribute(CONTINUATION_OBJECT);
  +        return (WebContinuation)objectModel.get(CONTINUATION_OBJECT);
       }
   
       /**
  @@ -69,8 +74,7 @@
        */
       public final static void setWebContinuation(Map objectModel,
                                             WebContinuation kont) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(CONTINUATION_OBJECT, kont);
  +        objectModel.put(CONTINUATION_OBJECT, kont);
       }
   
       /**
  @@ -80,8 +84,7 @@
        * @param obj The context object 
        */
       public final static void setContextObject(Map objectModel, Object obj) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(CONTEXT_OBJECT, obj);
  +        objectModel.put(CONTEXT_OBJECT, obj);
       }
       
       /**
  
  
  
  1.33      +3 -5      cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
  
  Index: FOM_Cocoon.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- FOM_Cocoon.java	9 Apr 2004 19:52:54 -0000	1.32
  +++ FOM_Cocoon.java	25 Apr 2004 12:12:08 -0000	1.33
  @@ -231,10 +231,8 @@
   
       void popCallContext() {
           // Clear the scope attribute
  -        Request request = this.getRequest();
  -        if (request != null) {
  -            request.removeAttribute(FOM_JavaScriptFlowHelper.FOM_SCOPE);
  -        }
  +        FOM_JavaScriptFlowHelper.setFOM_FlowScope(this.getObjectModel(), null);
  +
           this.currentCall = this.currentCall.caller;
           // reset current page locals
           if (this.currentCall != null) {
  
  
  
  1.5       +53 -39    cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptFlowHelper.java
  
  Index: FOM_JavaScriptFlowHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptFlowHelper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FOM_JavaScriptFlowHelper.java	5 Mar 2004 13:02:46 -0000	1.4
  +++ FOM_JavaScriptFlowHelper.java	25 Apr 2004 12:12:08 -0000	1.5
  @@ -16,8 +16,6 @@
   package org.apache.cocoon.components.flow.javascript.fom;
   
   import org.apache.cocoon.components.flow.FlowHelper;
  -import org.apache.cocoon.environment.ObjectModelHelper;
  -import org.apache.cocoon.environment.Request;
   
   import org.mozilla.javascript.Scriptable;
   
  @@ -33,24 +31,32 @@
    */
   public class FOM_JavaScriptFlowHelper extends FlowHelper {
   
  -    public static final String PACKAGES_OBJECT =
  +    // Constants defining keys in the object model used to store the various objects.
  +    // These constants are private so that access to these objects only go through the
  +    // accessors provided below.
  +    //
  +    // These objects are stored in the object model rather than as request attributes,
  +    // as object model is cloned for subrequests (see EnvironmentWrapper), whereas
  +    // request attributes are shared between the "real" request and all of its
  +    // child requests.
  +    private static final String PACKAGES_OBJECT =
           "cocoon.flow.js.packages";
  -    public static final String JAVA_PACKAGE_OBJECT =
  +    private static final String JAVA_PACKAGE_OBJECT =
           "cocoon.flow.js.packages.java";
  -    public static final String FOM_REQUEST =
  +    private static final String FOM_REQUEST =
           "cocoon.flow.js.fom.FOM_Request";
  -    public static final String FOM_RESPONSE =
  +    private static final String FOM_RESPONSE =
           "cocoon.flow.js.fom.FOM_Response";
  -    public static final String FOM_SESSION =
  +    private static final String FOM_SESSION =
           "cocoon.flow.js.fom.FOM_Session";
  -    public static final String FOM_CONTEXT =
  +    private static final String FOM_CONTEXT =
           "cocoon.flow.js.fom.FOM_Context";
  -    public static final String FOM_WEB_CONTINUATION =
  +    private static final String FOM_WEB_CONTINUATION =
           "cocoon.flow.js.fom.FOM_WebContinuation";
       /**
        * The parent scope to be used by nested scripts (e.g. Woody event handlers)
        */
  -    public static final String FOM_SCOPE =
  +    private static final String FOM_SCOPE =
           "cocoon.flow.js.fom.FOM_Scope";
   
       /**
  @@ -60,8 +66,7 @@
        * @return The Packages property
        */
       public static Scriptable getPackages(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(PACKAGES_OBJECT);
  +        return (Scriptable)objectModel.get(PACKAGES_OBJECT);
       }
   
       /**
  @@ -69,8 +74,7 @@
        * @param objectModel The Cocoon Environment's object model
        */
       public static void setPackages(Map objectModel, Scriptable pkgs) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(PACKAGES_OBJECT, pkgs);
  +        objectModel.put(PACKAGES_OBJECT, pkgs);
       }
   
       /**
  @@ -80,8 +84,7 @@
        * @return The java package property
        */
       public static Scriptable getJavaPackage(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(JAVA_PACKAGE_OBJECT);
  +        return (Scriptable)objectModel.get(JAVA_PACKAGE_OBJECT);
       }
   
       /**
  @@ -89,58 +92,69 @@
        * @param objectModel The Cocoon Environment's object model
        */
       public static void setJavaPackage(Map objectModel, Scriptable javaPkg) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(JAVA_PACKAGE_OBJECT, javaPkg);
  +        objectModel.put(JAVA_PACKAGE_OBJECT, javaPkg);
       }
   
       public static Scriptable getFOM_Request(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(FOM_REQUEST);
  +        return (Scriptable)objectModel.get(FOM_REQUEST);
       }
   
       public static void setFOM_Request(Map objectModel, Scriptable fom_request) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(FOM_REQUEST, fom_request);
  +        objectModel.put(FOM_REQUEST, fom_request);
       }
   
       public static Scriptable getFOM_Response(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(FOM_RESPONSE);
  +        return (Scriptable)objectModel.get(FOM_RESPONSE);
       }
   
       public static void setFOM_Response(Map objectModel, Scriptable fom_response) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(FOM_RESPONSE, fom_response);
  +        objectModel.put(FOM_RESPONSE, fom_response);
       }
   
       public static Scriptable getFOM_Session(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(FOM_SESSION);
  +        return (Scriptable)objectModel.get(FOM_SESSION);
       }
   
       public static void setFOM_Session(Map objectModel, Scriptable fom_session) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(FOM_SESSION, fom_session);
  +        objectModel.put(FOM_SESSION, fom_session);
       }
   
       public static Scriptable getFOM_Context(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(FOM_CONTEXT);
  +        return (Scriptable)objectModel.get(FOM_CONTEXT);
       }
   
       public static void setFOM_Context(Map objectModel, Scriptable fom_context) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(FOM_CONTEXT, fom_context);
  +        objectModel.put(FOM_CONTEXT, fom_context);
       }
   
       public static Scriptable getFOM_WebContinuation(Map objectModel) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        return (Scriptable)request.getAttribute(FOM_WEB_CONTINUATION);
  +        return (Scriptable)objectModel.get(FOM_WEB_CONTINUATION);
       }
   
       public static void setFOM_WebContinuation(Map objectModel,
                                                 Scriptable fom_webContinuation) {
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  -        request.setAttribute(FOM_WEB_CONTINUATION, fom_webContinuation);
  +        objectModel.put(FOM_WEB_CONTINUATION, fom_webContinuation);
  +    }
  +    
  +    /**
  +     * Get the flowscript scope, usable by JS snippets part of the control layer, such
  +     * as forms event listeners.
  +     * 
  +     * @param objectModel the object model where the scope is stored
  +     * @return the flowscript scope
  +     */
  +    public static Scriptable getFOM_FlowScope(Map objectModel) {
  +        return (Scriptable)objectModel.get(FOM_SCOPE);
  +    }
  +    
  +    /**
  +     * Set the flowscript scope usable by JS snippets.
  +     * 
  +     * @see #getFOM_FlowScope(Map)
  +     * @param objectModel
  +     * @param fom_scope
  +     */
  +    public static void setFOM_FlowScope(Map objectModel, Scriptable fom_scope) {
  +        objectModel.put(FOM_SCOPE, fom_scope);
       }
   }
  
  
  
  1.27      +3 -5      cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptInterpreter.java
  
  Index: FOM_JavaScriptInterpreter.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptInterpreter.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- FOM_JavaScriptInterpreter.java	24 Apr 2004 17:38:32 -0000	1.26
  +++ FOM_JavaScriptInterpreter.java	25 Apr 2004 12:12:08 -0000	1.27
  @@ -669,8 +669,7 @@
                       cocoon = (FOM_Cocoon)thrScope.get("cocoon", thrScope);
                       
                       // Register the current scope for scripts indirectly called from this function
  -                    cocoon.getRequest().setAttribute(
  -                                                     FOM_JavaScriptFlowHelper.FOM_SCOPE, thrScope);
  +                    FOM_JavaScriptFlowHelper.setFOM_FlowScope(cocoon.getObjectModel(), thrScope);
                       if (enableDebugger) {
                           if (!getDebugger().isVisible()) {
                               // only raise the debugger window if it isn't already visible
  @@ -762,8 +761,7 @@
                                          avalonContext,
                                          getLogger(), wk);
                   // Register the current scope for scripts indirectly called from this function
  -                cocoon.getRequest().setAttribute(
  -                                                 FOM_JavaScriptFlowHelper.FOM_SCOPE, kScope);
  +                FOM_JavaScriptFlowHelper.setFOM_FlowScope(cocoon.getObjectModel(), kScope);
                   
                   if (enableDebugger) {
                       getDebugger().setVisible(true);
  
  
  
  1.3       +6 -1      cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/AbstractContinuable.java
  
  Index: AbstractContinuable.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/components/flow/java/AbstractContinuable.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AbstractContinuable.java	16 Apr 2004 09:39:57 -0000	1.2
  +++ AbstractContinuable.java	25 Apr 2004 12:12:08 -0000	1.3
  @@ -24,6 +24,7 @@
   import org.apache.excalibur.source.SourceUtil;
   
   import java.io.OutputStream;
  +import java.util.Map;
   
   /**
    * Abstract class to add basic methods for flow handling.
  @@ -104,6 +105,10 @@
   
       public Request getRequest() {
           return ContextHelper.getRequest(getContext().getAvalonContext());
  +    }
  +    
  +    public Map getObjectModel() {
  +        return ContextHelper.getObjectModel(getContext().getAvalonContext());
       }
   
       public void processPipelineTo(String uri, Object bizdata, OutputStream out) {
  
  
  
  1.8       +2 -2      cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/forms/flow/java/FormInstance.java
  
  Index: FormInstance.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/javaflow/java/org/apache/cocoon/forms/flow/java/FormInstance.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- FormInstance.java	24 Apr 2004 00:00:42 -0000	1.7
  +++ FormInstance.java	25 Apr 2004 12:12:08 -0000	1.8
  @@ -189,7 +189,7 @@
   
               // Prematurely add the bizData as a request attribute so that event listeners can use it
               // (the same is done by cocoon.sendPage())
  -            getRequest().setAttribute(FlowHelper.CONTEXT_OBJECT, bizData);
  +            FlowHelper.setContextObject(this.getObjectModel(), bizData);
   
               finished = this.form.process(formContext);
             
  
  
  
  1.12      +5 -5      cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBinding.java
  
  Index: JavaScriptJXPathBinding.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JavaScriptJXPathBinding.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- JavaScriptJXPathBinding.java	9 Mar 2004 13:54:06 -0000	1.11
  +++ JavaScriptJXPathBinding.java	25 Apr 2004 12:12:08 -0000	1.12
  @@ -59,7 +59,7 @@
       
               // FIXME: remove this ugly hack and get the request from the
               // Avalon context once binding builder are real components
  -            Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +            Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
   
               try {
                   Map values = new HashMap(3);
  @@ -69,7 +69,7 @@
                       values.put("jxpathContext", jctx.getRelativeContext(pointer));
                   }
   
  -                JavaScriptHelper.execScript(this.loadScript, values, request);
  +                JavaScriptHelper.execScript(this.loadScript, values, objectModel);
       
               } catch(RuntimeException re) {
                   // rethrow
  @@ -94,14 +94,14 @@
               try {
                   // FIXME: remove this ugly hack and get the request from the Avalon context once
                   // binding builder are real components
  -                Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +                Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
   
                   Map values = new HashMap();
                   values.put("widget", widget);
                   values.put("jxpathContext", widgetCtx);
                   values.put("jxpathPointer", pointer);
   
  -                JavaScriptHelper.execScript(this.saveScript, values, request);
  +                JavaScriptHelper.execScript(this.saveScript, values, objectModel);
   
               } catch(RuntimeException re) {
                   // rethrow
  
  
  
  1.8       +5 -4      cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/event/impl/JavaScriptWidgetListener.java
  
  Index: JavaScriptWidgetListener.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/event/impl/JavaScriptWidgetListener.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JavaScriptWidgetListener.java	9 Mar 2004 13:54:26 -0000	1.7
  +++ JavaScriptWidgetListener.java	25 Apr 2004 12:12:08 -0000	1.8
  @@ -16,6 +16,7 @@
   package org.apache.cocoon.woody.event.impl;
   
   import java.util.HashMap;
  +import java.util.Map;
   
   import org.apache.avalon.framework.CascadingRuntimeException;
   import org.apache.cocoon.components.CocoonComponentManager;
  @@ -55,15 +56,15 @@
               
               // FIXME: remove this ugly hack and get the request from the Avalon context once
               // listener builder are real components
  -            Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +            Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
               
               // Add the biz data that was passed to showForm()
  -            Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            Object viewData = FlowHelper.getContextObject(objectModel);
               if (viewData != null) {
                   values.put("viewData", viewData);
               }
               
  -            JavaScriptHelper.execScript(this.script, values, request);
  +            JavaScriptHelper.execScript(this.script, values, objectModel);
               
           } catch(RuntimeException re) {
               // rethrow
  
  
  
  1.13      +3 -1      cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript/woody2.js
  
  Index: woody2.js
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/flow/javascript/woody2.js,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- woody2.js	18 Mar 2004 14:01:44 -0000	1.12
  +++ woody2.js	25 Apr 2004 12:12:08 -0000	1.13
  @@ -108,7 +108,9 @@
   
           // Prematurely add the bizData as a request attribute so that event listeners can use it
           // (the same is done by cocoon.sendPage())
  -        cocoon.request.setAttribute(Packages.org.apache.cocoon.components.flow.FlowHelper.CONTEXT_OBJECT, bizData);
  +        // FIXME: hack because object model isn't available in flowscript.
  +        var objectModel = org.apache.cocoon.components.CocoonComponentManager.getCurrentEnvironment().getObjectModel();
  +        org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel, bizData);
   
           finished = this.form.process(formContext);
           
  
  
  
  1.8       +12 -12    cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/util/JavaScriptHelper.java
  
  Index: JavaScriptHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/util/JavaScriptHelper.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JavaScriptHelper.java	9 Mar 2004 13:54:24 -0000	1.7
  +++ JavaScriptHelper.java	25 Apr 2004 12:12:08 -0000	1.8
  @@ -136,11 +136,11 @@
        * @param request a request where the flowscript scope will be searched (can be <code>null</code>).
        * @return an appropriate parent scope.
        */
  -    public static Scriptable getParentScope(Request request) {
  +    public static Scriptable getParentScope(Map objectModel) {
           // Try to get the flowscript scope
           Scriptable parentScope = null;
  -        if (request != null) {
  -            parentScope = (Scriptable)request.getAttribute(FOM_JavaScriptFlowHelper.FOM_SCOPE);
  +        if (objectModel != null) {
  +            parentScope = FOM_JavaScriptFlowHelper.getFOM_FlowScope(objectModel);
           }
   
           if (parentScope != null) {
  @@ -150,10 +150,10 @@
           }
       }
   
  -    public static Object execScript(Script script, Map values, Request request) throws JavaScriptException {
  +    public static Object execScript(Script script, Map values, Map objectModel) throws JavaScriptException {
           Context ctx = Context.enter();
           try {
  -            Scriptable parentScope = getParentScope(request);
  +            Scriptable parentScope = getParentScope(objectModel);
   
               // Create a new local scope
               Scriptable scope;
  @@ -174,8 +174,8 @@
                   scope.put(key, scope, Context.toObject(value, scope));
               }
               
  -            if (request != null) {
  -                Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            if (objectModel != null) {
  +                Object viewData = FlowHelper.getContextObject(objectModel);
                   if (viewData != null) {
                       scope.put("viewData", scope, Context.toObject(viewData, scope));
                   }
  @@ -188,13 +188,13 @@
           }
       }
       
  -    public static Object callFunction(Function func, Object thisObject, Object[] arguments, Request request) throws JavaScriptException {
  +    public static Object callFunction(Function func, Object thisObject, Object[] arguments, Map objectModel) throws JavaScriptException {
           Context ctx = Context.enter();
           try {
  -            Scriptable scope = getParentScope(request);
  +            Scriptable scope = getParentScope(objectModel);
   
  -            if (request != null) {
  -                Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            if (objectModel != null) {
  +                Object viewData = FlowHelper.getContextObject(objectModel);
                   if (viewData != null) {
                       // Create a new local scope to hold the view data
                       Scriptable newScope;
  
  
  
  1.5       +5 -3      cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/validation/impl/JavaScriptValidator.java
  
  Index: JavaScriptValidator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/validation/impl/JavaScriptValidator.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JavaScriptValidator.java	9 Mar 2004 13:54:24 -0000	1.4
  +++ JavaScriptValidator.java	25 Apr 2004 12:12:08 -0000	1.5
  @@ -15,6 +15,8 @@
    */
   package org.apache.cocoon.woody.validation.impl;
   
  +import java.util.Map;
  +
   import org.apache.avalon.framework.CascadingRuntimeException;
   import org.apache.avalon.framework.context.Context;
   import org.apache.cocoon.components.ContextHelper;
  @@ -51,12 +53,12 @@
        */
       public final boolean validate(Widget widget, FormContext context) {
   
  -        Request request = ContextHelper.getRequest(this.avalonContext);
  +        Map objectModel = ContextHelper.getObjectModel(this.avalonContext);
   
           Object result;
               
           try {
  -            result = JavaScriptHelper.callFunction(this.function, widget, new Object[] {widget}, request);
  +            result = JavaScriptHelper.callFunction(this.function, widget, new Object[] {widget}, objectModel);
           } catch(RuntimeException re) {
               throw re; // rethrow
           } catch(Exception e) {
  
  
  
  1.4       +5 -5      cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBinding.java
  
  Index: JavaScriptJXPathBinding.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/binding/JavaScriptJXPathBinding.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JavaScriptJXPathBinding.java	23 Apr 2004 11:42:58 -0000	1.3
  +++ JavaScriptJXPathBinding.java	25 Apr 2004 12:12:09 -0000	1.4
  @@ -59,7 +59,7 @@
       
               // FIXME: remove this ugly hack and get the request from the
               // Avalon context once binding builder are real components
  -            Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +            Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
   
               try {
                   Map values = new HashMap(3);
  @@ -69,7 +69,7 @@
                       values.put("jxpathContext", jctx.getRelativeContext(pointer));
                   }
   
  -                JavaScriptHelper.execScript(this.loadScript, values, request);
  +                JavaScriptHelper.execScript(this.loadScript, values, objectModel);
       
               } catch(RuntimeException re) {
                   // rethrow
  @@ -94,14 +94,14 @@
               try {
                   // FIXME: remove this ugly hack and get the request from the Avalon context once
                   // binding builder are real components
  -                Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +                Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
   
                   Map values = new HashMap();
                   values.put("widget", widget);
                   values.put("jxpathContext", widgetCtx);
                   values.put("jxpathPointer", pointer);
   
  -                JavaScriptHelper.execScript(this.saveScript, values, request);
  +                JavaScriptHelper.execScript(this.saveScript, values, objectModel);
   
               } catch(RuntimeException re) {
                   // rethrow
  
  
  
  1.3       +5 -4      cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java
  
  Index: JavaScriptWidgetListener.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/event/impl/JavaScriptWidgetListener.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavaScriptWidgetListener.java	9 Mar 2004 11:31:12 -0000	1.2
  +++ JavaScriptWidgetListener.java	25 Apr 2004 12:12:09 -0000	1.3
  @@ -16,6 +16,7 @@
   package org.apache.cocoon.forms.event.impl;
   
   import java.util.HashMap;
  +import java.util.Map;
   
   import org.apache.avalon.framework.CascadingRuntimeException;
   import org.apache.cocoon.components.CocoonComponentManager;
  @@ -55,15 +56,15 @@
               
               // FIXME: remove this ugly hack and get the request from the Avalon context once
               // listener builder are real components
  -            Request request = ObjectModelHelper.getRequest(CocoonComponentManager.getCurrentEnvironment().getObjectModel());
  +            Map objectModel = CocoonComponentManager.getCurrentEnvironment().getObjectModel();
               
               // Add the biz data that was passed to showForm()
  -            Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            Object viewData = FlowHelper.getContextObject(objectModel);
               if (viewData != null) {
                   values.put("viewData", viewData);
               }
               
  -            JavaScriptHelper.execScript(this.script, values, request);
  +            JavaScriptHelper.execScript(this.script, values, objectModel);
               
           } catch(RuntimeException re) {
               // rethrow
  
  
  
  1.6       +5 -3      cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js
  
  Index: Form.js
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/flow/javascript/Form.js,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Form.js	31 Mar 2004 21:06:59 -0000	1.5
  +++ Form.js	25 Apr 2004 12:12:09 -0000	1.6
  @@ -106,9 +106,11 @@
           var formContext = 
               Packages.org.apache.cocoon.forms.flow.javascript.FormsFlowHelper.getFormContext(cocoon, this.locale);
   
  -        // Prematurely add the bizData as a request attribute so that event listeners can use it
  +        // Prematurely add the bizData as in the object model so that event listeners can use it
           // (the same is done by cocoon.sendPage())
  -        cocoon.request.setAttribute(Packages.org.apache.cocoon.components.flow.FlowHelper.CONTEXT_OBJECT, bizData);
  +        // FIXME: hack because object model isn't available in flowscript.
  +        var objectModel = org.apache.cocoon.components.CocoonComponentManager.getCurrentEnvironment().getObjectModel();
  +        org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel, bizData);
   
           finished = this.form.process(formContext);
           
  
  
  
  1.3       +13 -13    cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/util/JavaScriptHelper.java
  
  Index: JavaScriptHelper.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/util/JavaScriptHelper.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavaScriptHelper.java	11 Mar 2004 02:56:32 -0000	1.2
  +++ JavaScriptHelper.java	25 Apr 2004 12:12:09 -0000	1.3
  @@ -133,14 +133,14 @@
        * that can be provided by a flowscript higher in the call stack, giving visibility to flowscript
        * functions and global (session) variables.
        * 
  -     * @param request a request where the flowscript scope will be searched (can be <code>null</code>).
  +     * @param objectModel the object model where the flowscript scope will be searched (can be <code>null</code>).
        * @return an appropriate parent scope.
        */
  -    public static Scriptable getParentScope(Request request) {
  +    public static Scriptable getParentScope(Map objectModel) {
           // Try to get the flowscript scope
           Scriptable parentScope = null;
  -        if (request != null) {
  -            parentScope = (Scriptable)request.getAttribute(FOM_JavaScriptFlowHelper.FOM_SCOPE);
  +        if (objectModel != null) {
  +            parentScope = FOM_JavaScriptFlowHelper.getFOM_FlowScope(objectModel);
           }
   
           if (parentScope != null) {
  @@ -150,10 +150,10 @@
           }
       }
   
  -    public static Object execScript(Script script, Map values, Request request) throws JavaScriptException {
  +    public static Object execScript(Script script, Map values, Map objectModel) throws JavaScriptException {
           Context ctx = Context.enter();
           try {
  -            Scriptable parentScope = getParentScope(request);
  +            Scriptable parentScope = getParentScope(objectModel);
   
               // Create a new local scope
               Scriptable scope;
  @@ -174,8 +174,8 @@
                   scope.put(key, scope, Context.toObject(value, scope));
               }
               
  -            if (request != null) {
  -                Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            if (objectModel != null) {
  +                Object viewData = FlowHelper.getContextObject(objectModel);
                   if (viewData != null) {
                       scope.put("viewData", scope, Context.toObject(viewData, scope));
                   }
  @@ -188,13 +188,13 @@
           }
       }
       
  -    public static Object callFunction(Function func, Object thisObject, Object[] arguments, Request request) throws JavaScriptException {
  +    public static Object callFunction(Function func, Object thisObject, Object[] arguments, Map objectModel) throws JavaScriptException {
           Context ctx = Context.enter();
           try {
  -            Scriptable scope = getParentScope(request);
  +            Scriptable scope = getParentScope(objectModel);
   
  -            if (request != null) {
  -                Object viewData = request.getAttribute(FlowHelper.CONTEXT_OBJECT);
  +            if (objectModel != null) {
  +                Object viewData = FlowHelper.getContextObject(objectModel);
                   if (viewData != null) {
                       // Create a new local scope to hold the view data
                       Scriptable newScope;
  
  
  
  1.3       +5 -3      cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidator.java
  
  Index: JavaScriptValidator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/forms/java/org/apache/cocoon/forms/validation/impl/JavaScriptValidator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JavaScriptValidator.java	9 Mar 2004 11:31:11 -0000	1.2
  +++ JavaScriptValidator.java	25 Apr 2004 12:12:09 -0000	1.3
  @@ -15,6 +15,8 @@
    */
   package org.apache.cocoon.forms.validation.impl;
   
  +import java.util.Map;
  +
   import org.apache.avalon.framework.CascadingRuntimeException;
   import org.apache.avalon.framework.context.Context;
   import org.apache.cocoon.components.ContextHelper;
  @@ -51,12 +53,12 @@
        */
       public final boolean validate(Widget widget, FormContext context) {
   
  -        Request request = ContextHelper.getRequest(this.avalonContext);
  +        Map objectModel = ContextHelper.getObjectModel(this.avalonContext);
   
           Object result;
               
           try {
  -            result = JavaScriptHelper.callFunction(this.function, widget, new Object[] {widget}, request);
  +            result = JavaScriptHelper.callFunction(this.function, widget, new Object[] {widget}, objectModel);
           } catch(RuntimeException re) {
               throw re; // rethrow
           } catch(Exception e) {