We've recently started migrating one of our applications from Tapestry 3 
to Tapestry 4. We make an extensive use of the component 
DirtyFormWarning(DFW) from the Tacos library, having, of course, 
installed their new version for Tapestry 4, and everything worked out 
fine until we came across a LinkSubmit in one of our Forms.

When we use a LinkSubmit to submit a form, we get the warning from the 
DFW that obviously we shouldn't get. Now, DFW does the check every time 
the user leaves a page by any means, and in the case it's trough a 
submit it just doesn't show the warning. To accomplish this, it adds the 
following to the page source:

var oldSubmit = form.onsubmit;
form.onsubmit = function() { setDirtyFormWarning(false); return 
oldSubmit ? oldSubmit() : true; }

So, if a user clicks a submit button (that is, a <input 
type=”submit”…>), or by any means the form.submit() method is called, 
the warning would not be displayed.

When we use a Submit component we are in that first case, so everything 
works fine, but where we have LinkSubmits instead,
the warning is always shown and we suspect its cause is in the script 
Form.js that is included with every Form.
We noticed that the HTML rendered by a LinkSubmit doesn't call directly 
the method form.submit(),
but instead calls Tapestry.submit_form(…) defined in 
org/apache/tapestry/form/Form.js, which calls the submit method on 
FormEventManager, which code we paste here:

FormEventManager.prototype.submit = function(name)

{
if (this.onsubmit_handler())
{
this.form.onsubmit = null;
this.form.submitname.value = name;
this.form.submit();
}
}



In bold is the line where we think the problem is. The listener added by 
DFW is lost there.
In that same script, Form.js, we found the method Tapestry.onsubmit(...) 
that adds a listener to an array. All the listeners there will be called 
in onsubmit_handler().
We made a small change in the DFW components to get it work, this is the 
change code:

in file: net.sf.tacos.form.DirtyFormWarning.script
Actual code:

var oldSubmit = form.onsubmit;
form.onsubmit = function() { setDirtyFormWarning(false); return 
oldSubmit ? oldSubmit() : true; }

Modified code:

Tapestry.onsubmit("${formName}", function() { 
setDirtyFormWarning(false); return true; });


Thanks

--
Pablo Nussembaum


Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Tacos-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tacos-devel

Reply via email to