Hi,

We just noticed that if user is on a page and ajax request is
executing, pressing a link can cause AbstractDefaultAjaxBehavior's
failurescript to be executed on the browser.

We noticed that this happens at least in cases where pressing a link
forwards user to other page by setting a different response page.

Content of ajax debug is same as in the jira issue I have posted before
(JIRA 1971):

    INFO: Initiating Ajax POST request on ? 
wicket:interface=:1:inputForm:back::IActivePageBehaviorListener:0:&wicket:ignoreIfNotActive=true&random=0.6741350924814413
    INFO: Invoking pre-call handler(s)...
    INFO: Received ajax response (31 characters)
    INFO:
    <ajax-response></ajax-response>
    ERROR: Error while parsing response: Could not find root <ajax-response> 
element
    INFO: Invoking post-call handler(s)...

Content of the ajax response is problem at least on ie6,ie7,ff2 and ff3. It 
seems
to fail, because xml reply does not contain doctype.

This is annoying, because the invoker of the ajax request is in our case 
inherited from the
AbstractAjaxTimerBehavior and we would like to do a page reload in the 
failurescript in case
that request fails so that page would still be updated even if there are some 
network problems.
Now pressing any link that forwards to other pages can force a reload to the
page, if some request is already executing. In this particular application this 
is wery common,
partly because of bad network connection from the client's site (request can 
take some time)
and partly because of very frequent ajax requests.

We tried to modify 
org.apache.wicket.request.target.basic.EmptyAjaxRequestTarget's
respond method so that it puts doctype to the respond as does the normal ajax 
target

we replaced this:
        public void respond(RequestCycle requestCycle)
        {
                
requestCycle.getResponse().write("<ajax-response></ajax-response>");
        }

with this:
        public void respond(RequestCycle requestCycle)
        {
                final WebResponse response = 
(WebResponse)requestCycle.getResponse();
                final Application app = Application.get();
                final String encoding = 
app.getRequestCycleSettings().getResponseRequestEncoding();

                // Set content type based on markup type for page
                response.setCharacterEncoding(encoding);
                response.setContentType("text/xml; charset=" + encoding);

                // Make sure it is not cached by a client
                response.setHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");
                response.setHeader("Cache-Control", "no-cache, 
must-revalidate");
                response.setHeader("Pragma", "no-cache");

                response.write("<?xml version=\"1.0\" encoding=\"");
                response.write(encoding);
                response.write("\"?>");
                response.write("<ajax-response></ajax-response>");
        }

And it works now. Should I open a jira issue for this?

Regards,
Mikko

------------------
Mikko Pukki
Syncron Tech Oy
Laserkatu 6
53850 Lappeenranta
+358 400 757 178


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

Reply via email to