cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ard Schrijvers" <a.schrijv...@hippo.nl>
Subject RE: Problem with continuation bookmark in flowscript/jxt
Date Wed, 05 Jul 2006 17:26:14 GMT
Why are you actually creating your own bkm? cocoon.sendPageAndWait already returns a continuation.
Can you try removing the bkm var and just do a 
 
cocoon.sendPageAndWait("orderFail.xml");
 
Try the following: 
 
var finished = false;
do {
        var k = cocoon.sendPageAndWait("orderFail.xml");
        k.invalidate();
       
       //validate your form:
       // if valid: finished = true and do postprocessing
       // if not: finished = false
 
    } while(!finished);
    
This does basically the same thing as the bookmark stuff in Form.js, only little different
 
Regards Ard
 



Hi,
I may be wrong here but that sure looks like overkill to me. I am generating a continuation
using: 

var form = new Form("forms/CreditCardDetails.xml");
form.showForm("CreditCardDetails.xml", {"userGlobal":userGlobal});
var model = form.getModel();
var bizData = {"fname" : model.fname, "lname" : model.lname, "account_no" : model.account_no,
"credit" : model.credit, "month" : model.month, "year" : model.year}

var bkm = cocoon.createWebContinuation();

I then pass the continuation via:

cocoon.sendPageAndWait("orderFail.xml", {bookmark:bkm})

The continuation id is populated in the form:


<tr>
    <td>  
	<form method="post" 

action="17172c756e3d405c52181710165f36741a190b48.kont">
	   <input

 type="submit" name="back" />
	</

form>
    </td>
</tr>

I click submit, and POW!!!! Now what I would like to know is why the above method does not
do what I expect it to?



regards

Andrew


On 05/07/06, Ard Schrijvers < a.schrijvers@hippo.nl> wrote: 

I mean that the following piece of code has the behavior you want I think:
 
var

comingBack = false; 



var bookmark = cocoon.createWebContinuation(ttl); 



// Attach the form to the continuation so that we can access by just knowing the continuation
id 

bookmark.setAttribute(

"form", this.form); 



if (comingBack) { 



// We come back to the bookmark: process the form 



if (finished && cocoon.request.getParameter("cocoon-ajax-continue") != null) { 



// A request with this parameter is sent by the client upon receiving the indication 



// that Ajax interaction on the form is finished (see below). 



// We also check "finished" to ensure we won't exit showForm() because of some 



// faulty or hacked request. It's set to false, this will simply redisplay the form. 



return bookmark; 

}



if (this.restoreHook) { 



this.restoreHook(this); 

}



var formContext = new Packages.org.apache.cocoon.forms.FormContext(cocoon.request, this.locale);




// Prematurely add the viewdata as in the object model so that event listeners can use it




// (the same is done by cocoon.sendPage()) 



// FIXME : hack needed because FOM doesn't provide access to the object model 



var objectModel = org.apache.cocoon.components.ContextHelper.getObjectModel(this.avalonContext);


org.apache.cocoon.components.flow.FlowHelper.setContextObject(objectModel, viewdata); 

finished = 

this.form.process(formContext); 



if (finished) { 



this.isValid = this.form.isValid(); 



var widget = this.form.getSubmitWidget(); 



// Can be null on "normal" submit 



this.submitId = widget == null ? null : widget.getId(); 



if (cocoon.request.getParameter("cocoon-ajax") != null) { 



// Ask the client to issue a new request reloading the whole page. 



// As we have nothing special to send back, so a header should be just what we need... 



// e.g. cocoon.response.setHeader("X-Cocoon-Ajax", "continue"); 



// cocoon.sendStatus(200); 



// ...but Safari doesn't consider empty responses (with content-length = 0) as 



// valid ones. So send a continue response by using directly the HttpResponse's 



// output stream. Avoiding this hack would require to put an additional pipeline 



// in the sitemap for just sending constant response, which isn't nice. 

cocoon.sendStatus(200);



var httpResponse = objectModel.get(org.apache.cocoon.environment.http.HttpEnvironment.HTTP_RESPONSE_OBJECT);




if (httpResponse) { 

httpResponse.setContentType(

"text/xml"); 



var text = "<?xml version='1.0'?><bu:document xmlns:bu='" + 

org.apache.cocoon.ajax.BrowserUpdateTransformer.BU_NSURI +



"'><bu:continue/></bu:document>"; 

httpResponse.setContentLength(text.length);

httpResponse.writer.print(text);

} 

else { 



// Empty response 

cocoon.response.setHeader(

"Content-Length", "0"); 

}

FOM_Cocoon.suicide();

}



return bookmark; 

}

}

comingBack = 

true; 

viewdata = 

this.buildViewData(viewdata) 

cocoon.sendPage(uri, viewdata, bookmark);



// Clean up after sending the page 



if (this.cleanupHook) { 



this.cleanupHook(this); 

}

FOM_Cocoon.suicide();

 

--

Hippo
Oosteinde 11
1017WT Amsterdam
The Netherlands
Tel  +31 (0)20 5224466
-------------------------------------------------------------
a.schrijvers@hippo.nl / http://www.hippo.nl <http://www.hippo.nl/> 
-------------------------------------------------------------- 



-----Original Message-----
From: Andrew Madu [mailto: andrewmadu@gmail.com]
Posted At: woensdag 5 juli 2006 18:44
Posted To: Cocoon User List
Conversation: Problem with continuation bookmark in flowscript/jxt
Subject: Re: Problem with continuation bookmark in flowscript/jxt


Ard,
sorry, I still don't get it!! In the context of:

var bkm = cocoon.createWebContinuation();
......

cocoon.sendPageAndWait("orderFail.xml", {bookmark:bkm, "OrderDetails":neworder, "transaction_message":
response.getCVV2Code()});

how do I implement :


Form.prototype.sendFormAndWait = function(){
}

?

regards

Andrew


On 05/07/06, Ard Schrijvers < a.schrijvers@hippo.nl> wrote: 



Hello Andrew,
 
take a look at Form.prototype.sendFormAndWait in  Form.js in the cocoon code. Think you will
get the idea if you look at that one,
 
Regards Ard 



Hi,
I am having some problems implementing a continuation bookmark. Basically a user enters some
form details and submits the details:

function confirmStage() {    
    //2. Get card details.
    var form = new Form("forms/CreditCardDetails.xml"); 
    form.showForm("CreditCardDetails.xml", {"userGlobal":userGlobal});
    var model = form.getModel();
    var bizData = {"fname" : model.fname, "lname" : model.lname, "account_no" : model.account_no,
"credit" : model.credit, "month" : model.month, "year" : model.year}
    
    //2b. Create bookmark just incase users order is rejected
    var bkm = cocoon.createWebContinuation ();
    
  
Later in the same function a check is done to determine whether a users details are valid.
If not the user is redirected to a fail page informing them of the failed transaction and
providing them with a link to go back to the page/state they were before they submitted their
details: 

                //Credit card was not accepted. Direct user to enter another card.
                cocoon.sendPageAndWait("orderFail.xml", {bookmark:bkm, "OrderDetails":neworder,
"transaction_message": response.getCVV2Code()});

orderFail.xml:

            <tr>
                <td>  
                    <form method="post" action="${ bookmark.id  <http://bookmark.id>
}.kont">
                        <input type="submit" />
                    </form>
                </td>
            </tr>

sitemap:

            <map:match pattern="**.kont"> 
               <map:select type="request-method">
                 <map:when test="POST">
                   <map:call continuation="{request-param:continuation-id}"/> 
                 </map:when>
                 <map:otherwise/>
               </map:select>
            </map:match>

when I click the submit button I get the following trace read. What am I missing here?: 


org.apache.cocoon.ProcessingException: Sitemap: no function nor continuation given in <map:call
function>
	at <map:call> - file:/C:/Program%20Files/jboss-4.0.3
/server/default/./deploy/jbossweb-


tomcat55.sar/ROOT.war/beyarecords/sitemap.xmap:817:66
	at org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode.invoke(CallFunctionNode.java:149)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.SelectNode.invoke(SelectNode.java:97)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:46)
	at org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:142)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process


(
ConcreteTreeProcessor.java:234)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process

(
TreeProcessor.java
:248)
	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:117)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:46)
	at org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:142)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java

:234)



	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:248)
	at org.apache.cocoon.Cocoon.process



(Cocoon.java:679)
	at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1154)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter



(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java

:81)



	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke



(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java

:39)



	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
	at org.apache.catalina.core.StandardHostValve.invoke



(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service



(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java

:744)



	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
	at java.lang.Thread.run(Unknown Source)






stacktrace[hide] 

org.apache.cocoon.ProcessingException: Sitemap: no function nor continuation given in <map:call
function>
	at <map:call> - file:/C:/Program%20Files/jboss-

4.0.3/server/default/./deploy/jbossweb-


tomcat55.sar/ROOT.war/beyarecords/sitemap.xmap:817:66
	at org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode.invoke(CallFunctionNode.java:149)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.SelectNode.invoke(SelectNode.java:97)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:46)
	at org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:142)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes



(AbstractParentProcessingNode.java:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process


(
ConcreteTreeProcessor.java:234)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process

(
TreeProcessor.java
:248)
	at org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:117)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:46)
	at org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:142)
	at org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java



:68)
	at org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:92)
	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java

:234)



	at org.apache.cocoon.components.treeprocessor.ConcreteTreeProcessor.process(ConcreteTreeProcessor.java:176)
	at org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:248)
	at org.apache.cocoon.Cocoon.process



(Cocoon.java:679)
	at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1154)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter



(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java

:81)



	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke



(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java

:39)



	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
	at org.apache.catalina.core.StandardHostValve.invoke



(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service



(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java

:744)



	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
	at java.lang.Thread.run(Unknown Source)






regards

Andrew





Mime
View raw message