cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christofer Dutz <mailingli...@c-ware.de>
Subject Re: ajax request and another cform in the same page
Date Tue, 12 Jun 2007 08:49:27 GMT
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 
> <mailto:mailinglists@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
>     <mailto:users-unsubscribe@cocoon.apache.org>
>     For additional commands, e-mail: users-help@cocoon.apache.org
>     <mailto:users-help@cocoon.apache.org>
>
>



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


Mime
View raw message