-
1. Re: a4j:form oncomplete not implemented?
sergeysmirnov Mar 15, 2007 4:38 PM (in response to andrew.rw.robinson)It should. If not, it is a bug
-
2. Re: a4j:form oncomplete not implemented?
alexsmirnov Mar 16, 2007 11:49 AM (in response to andrew.rw.robinson)<a4j:form > component without 'ajaxSubmit' attribute set to 'true' submitted by post method, not a with XmlHttpRequest.
-
3. Re: a4j:form oncomplete not implemented?
andrew.rw.robinson Mar 16, 2007 12:03 PM (in response to andrew.rw.robinson)what about:
<a4j:form oncomplete="alert('okay');">
<a4j:commandLink value="ajax me" />
</a4j:form>
In this simple example I am not getting the "okay" alert, and this is definitely submit by AJAX and not an HTTP POST.
Here is an example that should work IMO, but doesn't:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:a4j="https://ajax4jsf.dev.java.net/ajax" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <body> <a4j:form oncomplete="alert('AJAX is done');"> <a4j:commandLink value="submit AJAX" /> <a4j:status startText="AJAX in progress" stopText="" /> </a4j:form> </body> </html>
This is the work-around I have found:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:a4j="https://ajax4jsf.dev.java.net/ajax" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <body> <a4j:form> <a4j:commandLink value="submit AJAX" /> <a4j:status startText="AJAX in progress" stopText="" /> <script language="javascript" type="text/javascript"> // <![CDATA[ A4J.AJAX.AddListener({ onafterajax: function(req,domEvt,data) { window.setTimeout('alert("on complete");', 50) } }); // ]]> </script> </body> </html>
-
4. Re: a4j:form oncomplete not implemented?
sergeysmirnov Mar 16, 2007 1:32 PM (in response to andrew.rw.robinson)Ok. I see now, what Alex means.
andrew, a4j:form might work in Ajax or non-Ajax mode. It contains several attributes that belongs to Ajax Command Components API. However, if a4j:form works in non-Ajax mode, those attribute just do not make any sense
To turn a4j:form in ajax mode, you need to set the ajaxSubmit attribute to true (it is false by default)
If a4j:form works in Ajax mode, all the non-ajax command components (h:commandButton, h:commandLink and so on) become ajaxified (this is slight the same approach that AjaxAnywhere has)
Conclusion - oncomplete should not work without ajaxSubmit="true" -
5. Re: a4j:form oncomplete not implemented?
alexsmirnov Mar 16, 2007 1:42 PM (in response to andrew.rw.robinson)Right code will be :
<a4j:form oncomplete="alert('okay');" ajaxSubmit="true"> <a4j:htmlCommandLink value="ajax me" /> </a4j:form>
or :<a4j:form> <a4j:commandLink value="ajax me" oncomplete="alert('okay');"/> </a4j:form>
form component in ajax4jsf is designed for two use-cases:
1) Update <h:form> component or append <h:commandLink > by AJAX can provide some JavaScript errors ( original JSF components don't know about partial updates ). <a4j:form>/<a4j:htmlCommandLink> is safe for partial updates.
2) a4j:form with ajaxSubmit="true" attribute can append AJAX functionality to third-party components, like MyFaces extended data table, data scroller, tab panel etc. -
6. Re: a4j:form oncomplete not implemented?
andrew.rw.robinson Mar 16, 2007 1:48 PM (in response to andrew.rw.robinson)Okay, that is what I was afraid of. I was looking for a solution to have JavaScript that *always* executed after an A4J post regardless of the region that was submitted. Looks like the A4J.AddListener javascript call is what I need. Thanks.
FYI: does A4J work with uploading files/multi-part data? With AjaxAnywhere, uploading files had to be done through a normal HTTP POST with enctype multipart. I was not sure if that was an AjaxAnywhere limitation or an AJAX limitation.