On Thu, Apr 01, 2004 at 02:39:05PM -0500, Vadim Gritsenko wrote:
> Leszek Gawron wrote:
>
> >I have this snipped in one of my .js files :
> >
> >
> ...
>
> >function runContinuation( action ) {
> >
> >
>
> Provided that "action" contains continuation ID and not actual
> continuation object... you need to lookupWebContinuation from the
> ContinuationsManager component, this will give you WebContinuation
> object. Once you have it... Something like this should be able to invoke it:
>
> var wk = contManager.lookupWebContinuation(action);
> var c = wk.getContinuation();
> c(c);
Vadim,
This does not work. I get this exception:
rg.apache.avalon.framework.CascadingRuntimeException:
"resource://org/apache/cocoon/forms/flow/javascript/Form.js", line 106: uncaught
JavaScript exception: at main
(file:/C:/dev/eclipse-workspace/nTer/build/webapp/nTer/flow/test.js, Line 12) at
(resource://org/apache/cocoon/forms/flow/javascript/Form.js, Line 106):
java.lang.NullPointerException
org.apache.avalon.framework.CascadingRuntimeException:
"resource://org/apache/cocoon/forms/flow/javascript/Form.js", line 106: uncaught
JavaScript exception:
at main (file:/C:/dev/eclipse-workspace/nTer/build/webapp/nTer/flow/test.js, Line 12)
at (resource://org/apache/cocoon/forms/flow/javascript/Form.js, Line 106):
java.lang.NullPointerException
at
org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter.callFunction(FOM_JavaScriptInterpreter.java:695)
at
org.apache.cocoon.components.treeprocessor.sitemap.CallFunctionNode.invoke(CallFunctionNode.java:130)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:49)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:72)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:126)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:72)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:101)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:336)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:277)
at
org.apache.cocoon.components.treeprocessor.sitemap.MountNode.invoke(MountNode.java:103)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:49)
at
org.apache.cocoon.components.treeprocessor.sitemap.PreparableMatchNode.invoke(PreparableMatchNode.java:130)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:72)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelineNode.invoke(PipelineNode.java:126)
at
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:72)
at
org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode.invoke(PipelinesNode.java:101)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:336)
at
org.apache.cocoon.components.treeprocessor.TreeProcessor.process(TreeProcessor.java:277)
at org.apache.cocoon.Cocoon.process(Cocoon.java:619)
at org.apache.cocoon.servlet.CocoonServlet.service(CocoonServlet.java:1074)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:356)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:342)
at
com.mobilebox.hibernate.PersistenceManager.doFilter(PersistenceManager.java:65)
at
org.mortbay.jetty.servlet.WebApplicationHandler$Chain.doFilter(WebApplicationHandler.java:334)
at
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:286)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:567)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1808)
at
org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:525)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1758)
at org.mortbay.http.HttpServer.service(HttpServer.java:879)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:790)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:952)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:807)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:197)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:289)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:496)
Caused by: java.lang.NullPointerException
at
org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon.jsGet_request(FOM_Cocoon.java:1350)
at
org.apache.cocoon.components.flow.javascript.fom.FOM_Cocoon.getRequest(FOM_Cocoon.java:1404)
at
org.apache.cocoon.forms.flow.javascript.FormsFlowHelper.getFormContext(FormsFlowHelper.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:230)
at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1244)
at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:1134)
at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:190)
at
org.mozilla.javascript.continuations.ContinuationInterpreter.interpret(ContinuationInterpreter.java:138)
at
org.mozilla.javascript.continuations.InterpretedFunctionImpl.call(InterpretedFunctionImpl.java:121)
at org.mozilla.javascript.ScriptRuntime.call(ScriptRuntime.java:1244)
at
org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptInterpreter.callFunction(FOM_JavaScriptInterpreter.java:686)
... 37 more
I have attached the source of test.js
When I disable the call to loginInternal, main application view is being
shown. But after I press an action button there is an error with page local
variable. So it looks like invoking continuation this way does not set the run
environment properly
lg
--
__
| / \ | Leszek Gawron // \\
\_\\ //_/ [EMAIL PROTECTED] _\\()//_
.'/()\'. Phone: +48(501)720812 / // \\ \
\\ // recursive: adj; see recursive | \__/ |
var user = null;
function main( action ) {
print( "logujemy czy nie ?: " + action );
cocoon.response.setHeader( "Expires", "-1" );
cocoon.response.setHeader( "Cache-Control", "no-cache" );
cocoon.response.setHeader( "Pragma", "no-cache" );
print ( "user : " + user );
if ( user == null && !isContinuation( action ) ) {
loginInternal();
}
invoke( action );
}
function isContinuation( action ) {
var id = new java.lang.String( action );
return ( id.endsWith( ".continue" ) || id.endsWith( ".cont" ) );
}
function extractContinuationId( action ) {
var id = new java.lang.String( action );
var pos = id.indexOf( "." );
return id.substring( 0, pos );
}
function runContinuation( continuationId ) {
var contManager = null;
try {
contManager = cocoon.getComponent(
"org.apache.cocoon.components.flow.ContinuationsManager" );
var wk = contManager.lookupWebContinuation( continuationId );
} finally {
if ( contManager != null )
cocoon.releaseComponent( contManager );
}
var c = wk.getContinuation();
c(c);
}
function invoke( action ) {
print( "action: " + action );
if ( isContinuation( action ) ) {
var id = extractContinuationId( action );
print( "da id: " + id );
runContinuation( id );
} else {
func = this[ action ];
if ( func != undefined )
func.apply( this );
else
cocoon.sendPage( action, {} );
}
}
function loginInternal() {
var form = new Form( "forms/login_d.xml" );
var model = form.getModel();
form.validator = loginValidator;
form.showForm( "form/login", {} );
}
function loginValidator( form ) {
var query = nTerApi.session.createQuery( "from User where name = :name and
password = :password" );
query.setString( "name", form.getWidget( "username" ).getValue() );
query.setString( "password", form.getWidget( "password" ).getValue() );
var list = query.list();
if ( list.size() == 0 ) {
form.getWidget( "messages" ).addMessage( "BÅÄdny uÅytkownik lub
hasÅo!" );
return false;
}
user = list.get( 0 );
return true;
}
function login() {
user = null;
loginInternal();
cocoon.sendPage( "/nTer/view/welcome.jx", {} );
}
function welcome() {
cocoon.sendPage( "/nTer/view/welcome.jx", {} );
}
function logout() {
user = null;
cocoon.session.invalidate();
cocoon.redirectTo( "/nTer/welcome.do", {} );
}