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