The short of this is that there doesn't appear to be a really clean way to do this, though I'd love to be proved wrong. Here are a few options I see:

Option1: The most straightforward way to submit a form with a zone via Ajax would be to programatically click the submit button via Javascript:

   $(submit_id).click();

This would ensure that all the relevant Javascript that Tapestry adds for a zone-linked form will fire. It's not the cleanest solution, but it may work for you. One potential cavaet is the cross-browser compatibility of submit.click() --I can't remember if this works in IE.

Option 2: Alternatively, if you delve into the inner workings of the Javascript for Ajax form submission, you'll see that there's a Prototype observer for the custom event Tapestry.FORM_PROCESS_SUBMIT_EVENT added to the form. So you could use Prototype's Element.fire(event) method:

   $(form_id).fire(Tapestry.FORM_PROCESS_SUBMIT_EVENT)

I believe that this will do the Ajax form submission, but you may miss some of the client-side validation that would occur before the submit this way. Also it's potentially dependent on code that might change. Haven't tested this.

Option 3: Look into the background below (following along in tapestry.js) and find a cleaner solution than options 1 or 2.

Background:
- Forms get an onsubmit javascript method in Tapestry.FormEventManager, as defined in tapestry.js. - The onsubmit method fires when a submit button is clicked, but not when form.submit() is invoked from javascript. This is more about how browsers work than how the framework works. - After validation and preparation, the onsubmit method fires a Tapestry.FORM_PROCESS_SUBMIT_EVENT for forms having form.preventsubmission = true. This property is set when a form is hooked up to a zone by Tapestry.Initializer.linkZone(). (This is also where the Prototype observer for Tapestry.FORM_PROCESS_SUBMIT_EVENT is attached.)

As a note, trying to follow the code in tapestry.js in instances like this can shed some greater light on the magic behind the framework...
Shawn

xfile80303 wrote:
This is exactly the same problem I am having as well.

Even with the form's zone attribute set, form.submit() still does not
trigger a form submission in which Request.isXHR() returns true.

I'd love to see an answer to this one.

Levi


Inge Solvoll wrote:
Form component has a zone parameter. Use that, and the form will be
submitted with AJAX.

2009/8/18 sohu <zebra...@sohu.com>

if like this:
var myAjax = new Ajax.Request("poicenter.form", {
  method :'post',
  parameters :"c=c",
  onComplete :null
 });
tomcat will throw exception:Forms require that the request method be POST
and that the t:formdata query parameter have values.

if I just submit like this: form.submit(). Then isXHR() will return false
and zone will not be update.

any advise?
2009-08-18



sohu




--
Shawn Brownfield
Software Developer
Formos
360.892.6463
shawn.brownfi...@formos.com


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to