You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Marc Salvetti <sa...@gmail.com> on 2007/05/14 10:05:12 UTC

ajax request and another cform in the same page

Hello,

i'm running in a tricky problem while trying to add a search form to every
page of the site.
Anytime an ajax request is sent, either by a cform widget on another form,
or by a custom js function, i get an error 500 :
*Couldn't evaluate expression cformsHelper.pushWidget(id)*
resource://org/apache/cocoon/forms/generation/jx-macros.xml - 45:52**

with a NPE in the pushWidget() method.

Caused by: java.lang.NullPointerException
	at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(JXMacrosHelper.java:163)
	at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(JXMacrosHelper.java:231)
	at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:268)
	at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:61)
	at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:68)
	at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:50)
	at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:86)
	at org.apache.cocoon.components.expression.jexl.JexlExpression.evaluate(JexlExpression.java:47)
	... 135 more



By looking at the source, it appears that the member updatedWidgets has not
been initialized before the call to pushWiget, which cause the NPE.
Apparently, this is initialized in the call to form.process(), every time
the form is submited.

But in my case, i don't submit this form, but either another form or no form
at all, so i don't really know what i should do to fix this problem.

Any help  would be greatly appreciated,

Marc

Re: ajax request and another cform in the same page

Posted by Christofer Dutz <ma...@c-ware.de>.
Hi Marc ... sorry for the extemely late response.
I am currently doing a Project for a customer with very strict internet 
access policies, so I wasn't able to read this list.

I think your problems are related to two different main problems.
On the the one hand the (in your scenario #2 direct js ajax request + 1 
cform on the page = bug) Cocoon finds out it's an ajax request and since 
an ajax-anabled form is in the conrinuation, it uses this --> Error
in your fourth sample you have two CForms bound to one continuation. 
Since they are sticked to a default name the first form will overwrite 
the HashMap entry of the second --> Your first form dies.

I have no really sattisfying suggestion. How about using dojo to pull in 
the search form after the main page is fiished. By this your CForm in 
the search div would have it's own continuation and would no longer 
interfere with the main one. As far as I understand the Submit-Code of 
cforms this should work, but I haven't tried it.

Regards,
     Chris

Marc Salvetti schrieb:
> Hi Cristopher,
>
> thanks for your explanations, i think it's related to the same 
> problem, but i still have no idea on how to solve it.
> i will try to give a more detailed explanation of what i'm trying to do :
>
> on one page on my site, i have links that send an ajax request 
> directly, outside of a cform, like this :
> function sendReq(strReq) {
>     var req = createXHR();
>     if (req) {
>         req.open("POST", strReq, true); // true = async
>         req.setRequestHeader("Content-Type",
> "application/x-www-form-urlencoded; charset=UTF-8");
>         req.onreadystatechange = function() {
>             if (req.readyState == 4) {
>                 handleBrowserUpdate(req);
>             }
>         }
>         req.send("cocoon-ajax=true");
>     }
> }
> this is received by the sitemap as an ajax request, somewhere in the 
> pipe i add some <bu:replace> tags, transform this with the 
> browser-update transformer and send this back to the above js function 
> for browser updating.
>
> On some other pages, i have one cform with ajax turned on.
>
> Everything about this was working fine, until i tried to add a search 
> cform on every page of the website.
> From what i understood to my problem, every time an ajax request is 
> sent by whatever means (internal cforms or direct js call), to the 
> server, the template generator tries to access the list of updated 
> widgets in the search cform and crash because this list hasn't been 
> initialized (NPE).
> Apparently, the normal behavior is to initialize it after the form is 
> submited, which (wrongfully) assume that the ajax request was sent by 
> this form and not by some other means (another cform submit or a 
> direct js call)
>
> Or in other words :)
>
> direct js ajax request + no cform on the page = ok
> direct js ajax request + 1 cform on the page = bug
> cform ajax request + 1 cform on the page = ok
> cform ajax request + 2 cform on the page = bug
>
> Marc
>
> 2007/5/14, Christofer Dutz <mailinglists@c-ware.de 
> <ma...@c-ware.de>>:
>
>     Hi Marc,
>
>     do I understand your problem correct, that you have two forms on your
>     page? This can be a problem. Since having a deeper cook into
>     JavaFlow I
>     could see, that the form instance is bound to an AvalonContext with a
>     fixed Name. This means, that one FormInstance should overwrite the
>     other
>     one. I don't exactyl know how this is implemented in FlowScript, but
>     since Generators like the SuggestionListGenerator also looks for a
>     hard-coded "CocoonFormsInstnce" object, I guess this is generally done
>     that way.
>
>     Even if I know this doesn't help you solve the problem ... maybe it
>     helps you find it.
>
>     Feel free to contact me. I will do my best to help you if you
>     provide a
>     little more detailed description of your problem / applicatoin setup /
>     intention.
>
>     Chris
>
>     Marc Salvetti schrieb:
>     > Hello,
>     >
>     > i'm running in a tricky problem while trying to add a search
>     form to
>     > every page of the site.
>     > Anytime an ajax request is sent, either by a cform widget on another
>     > form, or by a custom js function, i get an error 500 :
>     > *Couldn't evaluate expression cformsHelper.pushWidget (id)*
>     > resource://org/apache/cocoon/forms/generation/jx-macros.xml -
>     45:52   //
>     >
>     >
>     > with a NPE in the pushWidget() method.
>     > Caused by: java.lang.NullPointerException
>     >       at
>     org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget
>     (JXMacrosHelper.java:163)
>     >       at
>     org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(JXMacrosHelper.java
>     > :231)
>     >       at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown
>     Source)
>     >       at
>     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     >       at java.lang.reflect.Method.invoke(Method.java:585)
>     >
>     >       at
>     org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke
>     (UberspectImpl.java:268)
>     >       at
>     org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:61)
>     >       at org.apache.commons.jexl.parser.ASTReference.execute
>     > (ASTReference.java:68)
>     >       at
>     org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:50)
>     >       at
>     org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:86)
>     >       at
>     org.apache.cocoon.components.expression.jexl.JexlExpression.evaluate
>     > (JexlExpression.java:47)
>     >       ... 135 more
>     >
>     >
>     > By looking at the source, it appears that the member updatedWidgets
>     > has not been initialized before the call to pushWiget, which
>     cause the
>     > NPE. Apparently, this is initialized in the call to form.process(),
>     > every time the form is submited.
>     >
>     > But in my case, i don't submit this form, but either another form or
>     > no form at all, so i don't really know what i should do to fix this
>     > problem.
>     >
>     > Any help  would be greatly appreciated,
>     >
>     > Marc
>
>
>
>     ---------------------------------------------------------------------
>     To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
>     <ma...@cocoon.apache.org>
>     For additional commands, e-mail: users-help@cocoon.apache.org
>     <ma...@cocoon.apache.org>
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Re: ajax request and another cform in the same page

Posted by Marc Salvetti <sa...@gmail.com>.
Hi Cristopher,

thanks for your explanations, i think it's related to the same problem, but
i still have no idea on how to solve it.
i will try to give a more detailed explanation of what i'm trying to do :

on one page on my site, i have links that send an ajax request directly,
outside of a cform, like this :
function sendReq(strReq) {
    var req = createXHR();
    if (req) {
        req.open("POST", strReq, true); // true = async
        req.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded; charset=UTF-8");
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                handleBrowserUpdate(req);
            }
        }
        req.send("cocoon-ajax=true");
    }
}
this is received by the sitemap as an ajax request, somewhere in the pipe i
add some <bu:replace> tags, transform this with the browser-update
transformer and send this back to the above js function for browser
updating.

On some other pages, i have one cform with ajax turned on.

Everything about this was working fine, until i tried to add a search cform
on every page of the website.
>From what i understood to my problem, every time an ajax request is sent by
whatever means (internal cforms or direct js call), to the server, the
template generator tries to access the list of updated widgets in the search
cform and crash because this list hasn't been initialized (NPE).
Apparently, the normal behavior is to initialize it after the form is
submited, which (wrongfully) assume that the ajax request was sent by this
form and not by some other means (another cform submit or a direct js call)

Or in other words :)

direct js ajax request + no cform on the page = ok
direct js ajax request + 1 cform on the page = bug
cform ajax request + 1 cform on the page = ok
cform ajax request + 2 cform on the page = bug

Marc

2007/5/14, Christofer Dutz <ma...@c-ware.de>:
>
> Hi Marc,
>
> do I understand your problem correct, that you have two forms on your
> page? This can be a problem. Since having a deeper cook into JavaFlow I
> could see, that the form instance is bound to an AvalonContext with a
> fixed Name. This means, that one FormInstance should overwrite the other
> one. I don't exactyl know how this is implemented in FlowScript, but
> since Generators like the SuggestionListGenerator also looks for a
> hard-coded "CocoonFormsInstnce" object, I guess this is generally done
> that way.
>
> Even if I know this doesn't help you solve the problem ... maybe it
> helps you find it.
>
> Feel free to contact me. I will do my best to help you if you provide a
> little more detailed description of your problem / applicatoin setup /
> intention.
>
> Chris
>
> Marc Salvetti schrieb:
> > Hello,
> >
> > i'm running in a tricky problem while trying to add a search form to
> > every page of the site.
> > Anytime an ajax request is sent, either by a cform widget on another
> > form, or by a custom js function, i get an error 500 :
> > *Couldn't evaluate expression cformsHelper.pushWidget(id)*
> > resource://org/apache/cocoon/forms/generation/jx-macros.xml - 45:52   //
> >
> >
> > with a NPE in the pushWidget() method.
> > Caused by: java.lang.NullPointerException
> >       at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(
> JXMacrosHelper.java:163)
> >       at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(
> JXMacrosHelper.java
> > :231)
> >       at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)
> >       at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:585)
> >
> >       at
> org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke
> (UberspectImpl.java:268)
> >       at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java
> :61)
> >       at org.apache.commons.jexl.parser.ASTReference.execute
> > (ASTReference.java:68)
> >       at org.apache.commons.jexl.parser.ASTReference.value(
> ASTReference.java:50)
> >       at org.apache.commons.jexl.ExpressionImpl.evaluate(
> ExpressionImpl.java:86)
> >       at
> org.apache.cocoon.components.expression.jexl.JexlExpression.evaluate
> > (JexlExpression.java:47)
> >       ... 135 more
> >
> >
> > By looking at the source, it appears that the member updatedWidgets
> > has not been initialized before the call to pushWiget, which cause the
> > NPE. Apparently, this is initialized in the call to form.process(),
> > every time the form is submited.
> >
> > But in my case, i don't submit this form, but either another form or
> > no form at all, so i don't really know what i should do to fix this
> > problem.
> >
> > Any help  would be greatly appreciated,
> >
> > Marc
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
> For additional commands, e-mail: users-help@cocoon.apache.org
>
>

Re: ajax request and another cform in the same page

Posted by Christofer Dutz <ma...@c-ware.de>.
Hi Marc,

do I understand your problem correct, that you have two forms on your 
page? This can be a problem. Since having a deeper cook into JavaFlow I 
could see, that the form instance is bound to an AvalonContext with a 
fixed Name. This means, that one FormInstance should overwrite the other 
one. I don't exactyl know how this is implemented in FlowScript, but 
since Generators like the SuggestionListGenerator also looks for a 
hard-coded "CocoonFormsInstnce" object, I guess this is generally done 
that way.

Even if I know this doesn't help you solve the problem ... maybe it 
helps you find it.

Feel free to contact me. I will do my best to help you if you provide a 
little more detailed description of your problem / applicatoin setup / 
intention.

Chris

Marc Salvetti schrieb:
> Hello,
>
> i'm running in a tricky problem while trying to add a search form to 
> every page of the site.
> Anytime an ajax request is sent, either by a cform widget on another 
> form, or by a custom js function, i get an error 500 :
> *Couldn't evaluate expression cformsHelper.pushWidget(id)*
> resource://org/apache/cocoon/forms/generation/jx-macros.xml - 45:52 	//
>
>
> with a NPE in the pushWidget() method.
> Caused by: java.lang.NullPointerException
> 	at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(JXMacrosHelper.java:163)
> 	at org.apache.cocoon.forms.generation.JXMacrosHelper.pushWidget(JXMacrosHelper.java
> :231)
> 	at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
>
> 	at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:268)
> 	at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:61)
> 	at org.apache.commons.jexl.parser.ASTReference.execute
> (ASTReference.java:68)
> 	at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:50)
> 	at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:86)
> 	at org.apache.cocoon.components.expression.jexl.JexlExpression.evaluate
> (JexlExpression.java:47)
> 	... 135 more
>
>
> By looking at the source, it appears that the member updatedWidgets 
> has not been initialized before the call to pushWiget, which cause the 
> NPE. Apparently, this is initialized in the call to form.process(), 
> every time the form is submited.
>
> But in my case, i don't submit this form, but either another form or 
> no form at all, so i don't really know what i should do to fix this 
> problem.
>
> Any help  would be greatly appreciated,
>
> Marc



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org