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