You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by co...@apache.org on 2003/12/10 02:57:09 UTC

cvs commit: cocoon-2.1/src/webapp/samples/flow/jxcalc/screens getNumberA.xml getNumberB.xml getOperator.xml

coliver     2003/12/09 17:57:09

  Modified:    src/documentation/xdocs/userdocs/flow jxtemplate.xml
               src/java/org/apache/cocoon/generation
                        JXTemplateGenerator.java
               src/webapp/samples/flow/jxcalc/screens getNumberA.xml
                        getNumberB.xml getOperator.xml
  Log:
  Unifying controller and view FOM
  
  Revision  Changes    Path
  1.22      +42 -24    cocoon-2.1/src/documentation/xdocs/userdocs/flow/jxtemplate.xml
  
  Index: jxtemplate.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/documentation/xdocs/userdocs/flow/jxtemplate.xml,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- jxtemplate.xml	12 Oct 2003 13:04:47 -0000	1.21
  +++ jxtemplate.xml	10 Dec 2003 01:57:09 -0000	1.22
  @@ -35,51 +35,69 @@
    </source>
   <p>Embedded Jexl expressions are contained in <code>${}</code>.</p>
   <p>Embedded JXPath expressions are contained in <code>#{}</code>.</p>
  -<p>The referenced objects may be Java Beans, DOM, JDOM, or JavaScript objects 
  -from a Flowscript. In addition the following implicit objects are available as
  -both JXPath and Jexl variables in a template:</p>
  +<p>The referenced objects may be Java Beans, DOM, or JavaScript objects 
  +from a Flowscript. In addition, a special <code>cocoon</code> object providing access to the Cocoon <link href="api.html#FOM">FOM</link> is available as
  +both a JXPath and Jexl variable in a template. 
  +</p>
  +<p>The <code>cocoon</code> object contains the following properties:</p>
  +
   <dl>
  -<dt><link href="../../../apidocs/org/apache/cocoon/environment/Request.html"><code>org.apache.cocoon.environment.Request</code></link><code> request</code></dt>
  +<dt><link href="api.html#request">request</link></dt>
   <dd><br/>The current Cocoon request<br/></dd>
    
  -<dt><br/><link href="../../../apidocs/org/apache/cocoon/environment/Response.html"><code>org.apache.cocoon.environment.Response</code></link><code> response</code></dt>
  -<dd><br/>The Cocoon response associated with the current request<br/></dd>
  +<dt><br/><link href="api.html#session">session</link></dt>
  +<dd><br/>The user session associated with the current request<br/></dd>
    
  -<dt><br/><link href="../../../apidocs/org/apache/cocoon/environment/Session.html"><code>org.apache.cocoon.environment.Session</code></link><code> session</code></dt>
  -<dd><br/>The Cocoon session associated with the current request<br/></dd>
  - 
  -<dt><br/><link href="../../../apidocs/org/apache/cocoon/environment/Context.html"><code>org.apache.cocoon.environment.Context</code></link><code> context</code></dt>
  +<dt><br/><link href="api.html#context">context</link></dt>
   <dd><br/>The Cocoon context associated with the current request<br/></dd>
    
  -<dt><br/><code>org.apache.avalon.framework.parameter.Parameter[]</code><code> parameters</code></dt>
  -<dd><br/>Any parameters passed to the generator in the pipeline<br/></dd>
  +<dt><br/><code>parameters</code></dt>
  +<dd><br/>A map containing the parameters passed to the generator in the pipeline<br/></dd>
  +<dt><br/><link href="api.html#WebContinuation">continuation</link></dt>
  +<dd><br/>The current Web Continuation from your Flowscript<br/></dd>
   </dl>
   <p>
   Jexl Example:</p>
   <source>
  -The content type of the current request is ${request.contentType}
  +The content type of the current request is ${cocoon.request.contentType}
   </source>
   <p>
   JXPath Example:</p>
   <source>
  -The content type of the current request is #{$request/contentType}
  +The content type of the current request is #{$cocoon/request/contentType}
   </source>
  +</s1>
   <p> 
  -The current Web Continuation from the Flowscript 
  -is also available as a variable named <code>continuation</code>. You would 
  -typically access its <code>id</code>:</p>
  +You would typically access the <code>id</code> of the Web Continuation:</p>
   <source>
  -&lt;form action="${continuation.id}"&gt;
  +&lt;form action="${cocoon.continuation.id}"&gt;
   </source>
  -<p>You can also reach previous continuations by using the <code>getParent()</code> function:</p>
  +<p>You can also reach previous continuations via its <code>parent</code> property:</p>
   <source>
  -&lt;form action="${continuation.getParent().id}" >
  +&lt;form action="${cocoon.continuation.parent.id}" >
   </source>
   <p>or using an XPath expression:</p>
   <source>
  -&lt;form action="#{getParent($continuation)/id}" >
  +&lt;form action="#{$cocoon/continuation/parent/id}" >
   </source>
  -</s1>
  +
  +<p>Deprecated Variables:</p>
  +<p>The following variables are deprecated but still supported:</p>
  +
  +<dl>
  +<dt><link href="../../../apidocs/org/apache/cocoon/environment/Request.html">org.apache.cocoon.environment.Request</link> <code>request</code></dt>
  +<dd><br/>The current Cocoon request (deprecated: use <code>cocoon.request</code> instead)<br/></dd>
  +
  +<dt><link href="../../../apidocs/org/apache/cocoon/environment/Session.html">org.apache.cocoon.environment.Session</link> <code>session</code></dt>
  +<dd><br/>The current user session (deprecated: use <code>cocoon.session</code> instead)<br/></dd>
  + 
  +<dt><link href="../../../apidocs/org/apache/cocoon/environment/Context.html">org.apache.cocoon.environment.Context</link> <code>context</code></dt>
  +<dd><br/>The current context (deprecated: use <code>cocoon.context</code> instead)<br/></dd>
  +
  +<dt><link href="../../../apidocs/org/apache/cocoon/components/flow/WebContinuation.html">org.apache.cocoon.components.flow.WebContinuation</link> <code>continuation</code></dt>
  +<dd><br/>The current Web Continuation (deprecated: use <code>cocoon.continuation</code> instead)<br/></dd>
  +</dl>
  +
   <s1 title ="Tags">
   <p>The JXTemplate Generator tags are defined in the namespace</p>
   <source>
  @@ -281,10 +299,10 @@
   The <code>type</code> attribute indicates which fields of the specified <code>Date</code> instance are to be displayed, and should be either "time", "date", or "both". The default value for this attribute is "date", so if no <code>type</code> attribute is present, the <code>formatDate</code> tag -- true to its name -- will only display the date information associated with the <code>Date</code> instance, specified using the tag's value attribute. 
   </p>
   <p>
  -The <code>dateStyle</code> and <code>timeStyle</code> attributes indicate how the date and time information should be formatted, respectively. Valid styles are "default", "short", "medium", "long", and "full". The default value is, naturally, "default", indicating that a locale-specific style should be used. The semantics for the other four style values are as defined by the @link{java.text.DateFormat} class. 
  +The <code>dateStyle</code> and <code>timeStyle</code> attributes indicate how the date and time information should be formatted, respectively. Valid styles are "default", "short", "medium", "long", and "full". The default value is, naturally, "default", indicating that a locale-specific style should be used. The semantics for the other four style values are as defined by the java.text.DateFormat class. 
   </p>
   <p>
  -Rather than relying on the built-in styles, you can use the pattern attribute to specify a custom style. When present, the value of the pattern attribute should be a pattern string following the conventions of the @link{java.text.SimpleDateFormat} class. These patterns are based on replacing designated characters within the pattern with corresponding date and time fields. For example, the pattern MM/dd/yyyy indicates that two-digit month and date values and a four-digit year value should be displayed, separated by forward slashes. 
  +Rather than relying on the built-in styles, you can use the pattern attribute to specify a custom style. When present, the value of the pattern attribute should be a pattern string following the conventions of the java.text.SimpleDateFormat class. These patterns are based on replacing designated characters within the pattern with corresponding date and time fields. For example, the pattern MM/dd/yyyy indicates that two-digit month and date values and a four-digit year value should be displayed, separated by forward slashes. 
   </p>
   <p>
   If the <code>var</code> attribute is specified, then a String value containing the formatted date is assigned to the named variable. Otherwise, the <code>formatDate</code> tag will write out the formatting results.
  
  
  
  1.20      +153 -49   cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java
  
  Index: JXTemplateGenerator.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/generation/JXTemplateGenerator.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- JXTemplateGenerator.java	6 Dec 2003 22:18:33 -0000	1.19
  +++ JXTemplateGenerator.java	10 Dec 2003 01:57:09 -0000	1.20
  @@ -62,12 +62,14 @@
   import java.text.DecimalFormatSymbols;
   import java.text.NumberFormat;
   import java.text.SimpleDateFormat;
  +import java.util.Collection;
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.LinkedList;
   import java.util.List;
   import java.util.Locale;
   import java.util.Map;
  +import java.util.Set;
   import java.util.Stack;
   import java.util.TimeZone;
   
  @@ -76,6 +78,7 @@
   import org.apache.cocoon.components.flow.FlowHelper;
   import org.apache.cocoon.components.flow.WebContinuation;
   import org.apache.cocoon.components.flow.javascript.JavaScriptFlow;
  +import org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptFlowHelper;
   import org.apache.cocoon.components.source.SourceUtil;
   import org.apache.cocoon.environment.ObjectModelHelper;
   import org.apache.cocoon.environment.Request;
  @@ -94,6 +97,7 @@
   import org.apache.commons.jexl.util.introspection.VelPropertySet;
   import org.apache.commons.jxpath.CompiledExpression;
   import org.apache.commons.jxpath.DynamicPropertyHandler;
  +import org.apache.commons.jxpath.ExpressionContext;
   import org.apache.commons.jxpath.JXPathBeanInfo;
   import org.apache.commons.jxpath.JXPathContext;
   import org.apache.commons.jxpath.JXPathContextFactory;
  @@ -104,6 +108,7 @@
   import org.apache.excalibur.source.SourceException;
   import org.apache.excalibur.source.SourceValidity;
   import org.mozilla.javascript.Context;
  +import org.mozilla.javascript.Function;
   import org.mozilla.javascript.JavaScriptException;
   import org.mozilla.javascript.NativeArray;
   import org.mozilla.javascript.NativeJavaClass;
  @@ -149,9 +154,6 @@
    * <dt><code>request</code> (<code>org.apache.cocoon.environment.Request</code>)</dt>
    * <dd>The Cocoon current request</dd>
    *
  - * <dt><code>response</code> (<code>org.apache.cocoon.environment.Response</code>)</dt>
  - * <dd>The Cocoon response associated with the current request</dd>
  - *
    * <dt><code>session</code> (<code>org.apache.cocoon.environment.Session</code>)</dt>
    * <dd>The Cocoon session associated with the current request</dd>
    *
  @@ -159,7 +161,7 @@
    * <dd>The Cocoon context associated with the current request</dd>
    *
    * <dt><code>parameters</code> (<code>org.apache.avalon.framework.parameters.Parameters</code>)</dt>
  - * <dd>Any parameters passed to the generator in the pipeline</dd>
  + * <dd>A map of parameters passed to the generator in the pipeline</dd>
    * </dl>
    * </p>
    *
  @@ -514,7 +516,7 @@
               }
               
               public Object invoke(Object thisArg) throws Exception {
  -                Context.enter();
  +                org.mozilla.javascript.Context cx = Context.enter();
                   try {
                       Scriptable thisObj;
                       if (!(thisArg instanceof Scriptable)) {
  @@ -523,11 +525,23 @@
                           thisObj = (Scriptable)thisArg;
                       }
                       Object result = ScriptableObject.getProperty(thisObj, name);
  -                    if (result == Undefined.instance || 
  -                        result == Scriptable.NOT_FOUND) {
  -                        result = null;
  +                    if (result == Scriptable.NOT_FOUND) {
  +                        result = ScriptableObject.getProperty(thisObj, "get" + name.substring(0, 1).toUpperCase() + (name.length() > 1 ? name.substring(1) : ""));
  +                        if (result != Scriptable.NOT_FOUND &&
  +                            result instanceof Function) {
  +                            try {
  +                                result = ((Function)result).call(cx, 
  +                                                                 ScriptableObject.getTopLevelScope(thisObj), thisObj, new Object[] {});
  +                            } catch (JavaScriptException exc) {
  +                                exc.printStackTrace();
  +                                result = null;
  +                            }
  +                        }
                       } 
  -                    if (result instanceof Wrapper) {
  +                    if (result == Scriptable.NOT_FOUND ||
  +                        result == Undefined.instance) {
  +                        result = null;
  +                    } else if (result instanceof Wrapper) {
                           if (!(result instanceof NativeJavaClass)) {
                               result = ((Wrapper)result).unwrap();
                           }
  @@ -749,9 +763,12 @@
   
       static class MyVariables implements Variables {
   
  +        MyVariables closure;
  +
           Map localVariables = new HashMap();
   
           static final String[] VARIABLES = new String[] {
  +            "cocoon",
               "continuation",
               "flowContext",
               "request",
  @@ -760,41 +777,66 @@
               "session",
               "parameters"
           };
  +        
  +        Object cocoon;
   
  +        // backward compatibility
           Object bean, kont, request, response,
               session, context, parameters;
   
  -        MyVariables(Object bean, WebContinuation kont,
  -                    Request request, Response response,
  -                    org.apache.cocoon.environment.Context context,
  -                    Parameters parameters) {
  +        MyVariables(Object cocoon,
  +                    Object bean, 
  +                    WebContinuation kont,
  +                    Object request,
  +                    Object session,
  +                    Object context,
  +                    Object parameters) {
  +            this.cocoon = cocoon;
               this.bean = bean;
               this.kont = kont;
               this.request = request;
  -            this.session = request.getSession(false);
  -            this.response = response;
  +            this.session = session;
               this.context = context;
               this.parameters = parameters;
           }
   
  +        public MyVariables(MyVariables parent) {
  +            this.closure = parent;
  +        }
  +
           public boolean isDeclaredVariable(String varName) {
               for (int i = 0; i < VARIABLES.length; i++) {
                   if (varName.equals(VARIABLES[i])) {
                       return true;
                   }
               }
  -            return localVariables.containsKey(varName);
  +            if (localVariables.containsKey(varName)) {
  +                return true;
  +            }
  +            if (closure != null) {
  +                return closure.isDeclaredVariable(varName);
  +            }
  +            return false;
           }
           
           public Object getVariable(String varName) {
  +            Object result = localVariables.get(varName);
  +            if (result != null) {
  +                return result;
  +            }
  +            if (closure != null) {
  +                return closure.getVariable(varName);
  +            }
  +            if (varName.equals("cocoon")) {
  +                return cocoon;
  +            }
  +            // backward compatibility
               if (varName.equals("continuation")) {
                   return kont;
               } else if (varName.equals("flowContext")) {
                   return bean;
               } else if (varName.equals("request")) {
                   return request;
  -            } else if (varName.equals("response")) {
  -                return response;
               } else if (varName.equals("session")) {
                   return session;
               } else if (varName.equals("context")) {
  @@ -802,7 +844,7 @@
               } else if (varName.equals("parameters")) {
                   return parameters;
               }
  -            return localVariables.get(varName);
  +            return null;
           }
           
           public void declareVariable(String varName, Object value) {
  @@ -965,7 +1007,7 @@
                       (org.apache.commons.jexl.Expression)compiled;
                   return e.evaluate(jexlContext);
               }
  -            return expr.raw;
  +            return compiled;
           } catch (InvocationTargetException e) {
               Throwable t = e.getTargetException();
               if (t instanceof Exception) {
  @@ -1045,7 +1087,7 @@
                       (org.apache.commons.jexl.Expression)compiled;
                   return e.evaluate(jexlContext);
               }
  -            return compiled;
  +            return expr.raw;
           } catch (InvocationTargetException e) {
               Throwable t = e.getTargetException();
               if (t instanceof Exception) {
  @@ -1526,11 +1568,12 @@
   
       static class StartForEach extends StartInstruction {
           StartForEach(StartElement raw,
  -                     Expression items, String var,
  +                     Expression items, String var, String varStatus,
                        Expression begin, Expression end, Expression step, Boolean lenient) {
               super(raw);
               this.items = items;
               this.var = var;
  +            this.varStatus = varStatus;
               this.begin = begin;
               this.end = end;
               this.step = step;
  @@ -1538,6 +1581,7 @@
           }
           final Expression items;
           final String var;
  +        final String varStatus;
           final Expression begin;
           final Expression end;
           final Expression step;
  @@ -2285,6 +2329,7 @@
                                                    FOR_EACH,
                                                    locator);
                       String var = attrs.getValue("var");
  +                    String varStatus = attrs.getValue("varStatus");
                       if (items == null) {
                           if (select == null && (begin == null || end == null)) {
                               throw new SAXParseException("forEach: \"select\", \"items\", or both \"begin\" and \"end\" must be specified", locator, null);
  @@ -2299,7 +2344,8 @@
                       Boolean lenient = (lenientValue == null) ? null : Boolean.valueOf(lenientValue);
                       StartForEach startForEach = 
                           new StartForEach(startElement, expr, 
  -                                         var, begin, end, step,lenient);
  +                                         var, varStatus,
  +                                         begin, end, step,lenient);
                       newEvent = startForEach;
                   } else if (localName.equals(FORMAT_NUMBER)) {
                       Expression value = 
  @@ -2718,16 +2764,26 @@
                                Parameters parameters,
                                Map objectModel) {
           final Request request = ObjectModelHelper.getRequest(objectModel);
  -        final Response response = ObjectModelHelper.getResponse(objectModel);
  -        final org.apache.cocoon.environment.Context app =
  -                  ObjectModelHelper.getContext(objectModel);
  -        
  -        this.variables = new MyVariables(contextObject,
  -                                        kont,
  -                                        request,
  -                                        response,
  -                                        app,
  -                                        parameters);
  +        final Object session = request.getSession(false);
  +        final Object app =  ObjectModelHelper.getContext(objectModel);
  +        Map cocoon = new HashMap();
  +        cocoon.put("request", 
  +                   FOM_JavaScriptFlowHelper.getFOM_Request(objectModel));
  +        if (session != null) {
  +            cocoon.put("session", 
  +                       FOM_JavaScriptFlowHelper.getFOM_Session(objectModel));
  +        }
  +        cocoon.put("context", 
  +                   FOM_JavaScriptFlowHelper.getFOM_Context(objectModel));
  +        cocoon.put("continuation", kont);
  +        cocoon.put("parameters", parameters.toProperties(parameters));
  +        this.variables = new MyVariables(cocoon,
  +                                         contextObject,
  +                                         kont,
  +                                         request,
  +                                         session,
  +                                         app,
  +                                         parameters);
           Map map;
           if (contextObject instanceof Map) {
               map = (Map)contextObject;
  @@ -2735,14 +2791,13 @@
               map = new HashMap();
               fillContext(contextObject, map);
           }
  -        
           jxpathContext = jxpathContextFactory.newContext(null, contextObject);
           jxpathContext.setVariables(variables);
           jxpathContext.setLenient(parameters.getParameterAsBoolean("lenient-xpath", false));
           globalJexlContext = new MyJexlContext();
           globalJexlContext.setVars(map);
           map = globalJexlContext.getVars();
  -        
  +        map.put("cocoon", cocoon);
           if (contextObject != null) {
               map.put("flowContext", contextObject);
               // FIXME (VG): Is this required (what it's used for - examples)?
  @@ -2753,15 +2808,12 @@
               map.put("java", javaPkg);
               map.put("Packages", pkgs);
           }
  -        if (kont!=null) {
  +        if (kont != null) {
               map.put("continuation", kont);
           }
           map.put("request", request);
  -        map.put("response", response);
           map.put("context", app);
           map.put("parameters", parameters);
  -        
  -        final Object session = request.getSession(false);
           if (session != null) {
               map.put("session", session);
           }
  @@ -2948,6 +3000,39 @@
           }
       }
   
  +    public static class LoopTagStatus {
  +        Object current;
  +        int index;
  +        int count;
  +        boolean first;
  +        boolean last;
  +        int begin;
  +        int end;
  +        int step;
  +        
  +        public Object getCurrent() {
  +            return current;
  +        }
  +        public int getIndex() {
  +            return index;
  +        }
  +        public int getCount() {
  +            return count;
  +        }
  +        public boolean isFirst() {
  +            return first;
  +        }
  +        public boolean isLast() {
  +            return last;
  +        }
  +        public int getEnd() {
  +            return end;
  +        }
  +        public int getStep() {
  +            return step;
  +        }
  +    }
  +    
       private void execute(final XMLConsumer consumer,
                            MyJexlContext jexlContext,
                            JXPathContext jxpathContext,
  @@ -3104,7 +3189,6 @@
                                       org.apache.commons.jexl.util.Introspector.getUberspect().getIterator(result, new Info(ev.location.getSystemId(),
                                                                                                                             ev.location.getLineNumber(),
                                                                                                                             ev.location.getColumnNumber()));
  -                                
                               }
                               if (iter == null) {
                                   iter = EMPTY_ITER;
  @@ -3150,10 +3234,24 @@
                   int i;
                   MyJexlContext localJexlContext = 
                       new MyJexlContext(jexlContext);
  +                MyVariables localJXPathVariables = 
  +                    new MyVariables((MyVariables)jxpathContext.getVariables());
  +                    
                   for (i = 0; i < begin && iter.hasNext(); i++) {
                       iter.next();
                   }
  -                for (; i <= end && iter.hasNext(); i++) {
  +                LoopTagStatus status = null;
  +                if (startForEach.varStatus != null) {
  +                    status = new LoopTagStatus();
  +                    status.end = end;
  +                    status.step = step;
  +                    status.first = true;
  +                    localJexlContext.put(startForEach.varStatus,
  +                                         status);
  +                    localJXPathVariables.declareVariable(startForEach.varStatus,
  +                                                         status);
  +                }
  +                for (int count = 1; i <= end && iter.hasNext(); i++, count++) {
                       Object value;
                       JXPathContext localJXPathContext = null;
                       value = iter.next();
  @@ -3170,12 +3268,20 @@
                           }
                       } else {
                           localJXPathContext =
  -                            jxpathContextFactory.newContext(null, value);
  +                            jxpathContextFactory.newContext(jxpathContext, 
  +                                                            value);
                       }
  -                    localJXPathContext.setVariables(variables);
  +                    localJXPathContext.setVariables(localJXPathVariables);
                       if (startForEach.var != null) {
                           localJexlContext.put(startForEach.var, value);
                       }
  +                    if (status != null) {
  +                        status.index = i;
  +                        status.count = count;
  +                        status.first = i == begin;
  +                        status.current = value;
  +                        status.last = (i == end || !iter.hasNext());
  +                    }
                       execute(consumer,
                               localJexlContext,
                               localJXPathContext,
  @@ -3355,10 +3461,9 @@
                                          startElement.raw);
                       builder.endDocument();
                       Node node = builder.getDocument().getDocumentElement();
  -                    MyVariables vars = 
  +                    MyVariables parent = 
                           (MyVariables)jxpathContext.getVariables();
  -                    Map saveLocals = vars.localVariables;
  -                    vars.localVariables = new HashMap();
  +                    MyVariables vars = new MyVariables(parent);
                       MyJexlContext localJexlContext = 
                           new MyJexlContext(globalJexlContext);
                       // JXPath doesn't handle NodeList, so convert it to
  @@ -3370,7 +3475,7 @@
                           arr[ii] = children.item(ii);
                       }
                       localJexlContext.put("content", arr);
  -                    vars.localVariables.put("content", arr);
  +                    vars.declareVariable("content", arr);
                       Iterator iter = def.parameters.entrySet().iterator();
                       while (iter.hasNext()) {
                           Map.Entry e = (Map.Entry)iter.next();
  @@ -3383,7 +3488,7 @@
                               val = default_;
                           }
                           localJexlContext.put(key, val);
  -                        vars.localVariables.put(key, val);
  +                        vars.declareVariable(key, val);
                       }
                       JXPathContext localJXPathContext =
                           jxpathContextFactory.newContext(null, arr);
  @@ -3393,7 +3498,6 @@
                            consumer, 
                            localJexlContext, localJXPathContext,
                            def.body, def.endInstruction);
  -                    vars.localVariables = saveLocals;
                       ev = startElement.endElement.next;
                       continue;
                   }
  
  
  
  1.3       +2 -2      cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml
  
  Index: getNumberA.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberA.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- getNumberA.xml	22 Oct 2003 16:56:21 -0000	1.2
  +++ getNumberA.xml	10 Dec 2003 01:57:09 -0000	1.3
  @@ -12,7 +12,7 @@
       </resources>
       <title>Calculator</title>
       <content>
  -      <form method="post" action="continue.#{$continuation/id}">
  +      <form method="post" action="continue.#{$cocoon/continuation/id}">
           <para>Enter value of <strong>a</strong>: <input type="text" name="a"/></para>
           <input type="submit" name="submit" value="Enter"/>
         </form>
  
  
  
  1.3       +2 -2      cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberB.xml
  
  Index: getNumberB.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getNumberB.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- getNumberB.xml	22 Oct 2003 16:56:21 -0000	1.2
  +++ getNumberB.xml	10 Dec 2003 01:57:09 -0000	1.3
  @@ -12,7 +12,7 @@
       </resources>
       <title>Calculator</title>
       <content>
  -      <form method="post" action="continue.#{$continuation/id}">
  +      <form method="post" action="continue.#{$cocoon/continuation/id}">
           <para>a = <strong>#{a}</strong></para>
           <para>Enter value of <strong>b</strong>: <input type="text" name="b"/></para>
           <input type="submit" name="submit" value="Enter"/>
  
  
  
  1.3       +2 -2      cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getOperator.xml
  
  Index: getOperator.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/webapp/samples/flow/jxcalc/screens/getOperator.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- getOperator.xml	22 Oct 2003 16:56:21 -0000	1.2
  +++ getOperator.xml	10 Dec 2003 01:57:09 -0000	1.3
  @@ -12,7 +12,7 @@
       </resources>
       <title>Calculator</title>
       <content>
  -      <form  method="post" action="continue.#{$continuation/id}">
  +      <form  method="post" action="continue.#{$cocoon/continuation/id}">
           <para>a = <strong>#{a}</strong></para>
           <para>b = <strong>#{b}</strong></para>
           <para>Enter operator