Wicket-Ajax header always false with BaseWicketTester
-----------------------------------------------------

                 Key: WICKET-1066
                 URL: https://issues.apache.org/jira/browse/WICKET-1066
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.3.0-beta4, 1.3.0-beta3
            Reporter: David Shepherdson


The 'Wicket-Ajax' header is always missing when using BaseWicketTester, even 
when the request should be an AJAX request.

The specific case we have is an AjaxLink that, when clicked, shows a modal 
window. We call BaseWicketTester's clickLink(String) method to simulate 
clicking the link. The link's onClick(...) method is called with an appropriate 
AjaxRequestTarget; however, ModalWindow's onBeforeRender() tests whether the 
request is an AJAX request (using ((WebRequest)getRequest()).isAjax()) and, if 
it's not, hides the content panel.

The problem is that the isAjax() call tests whether the HttpServletRequest's 
'Wicket-Ajax' header is present and 'true'; when running this code with 
BaseWicketTester, the header is never there, and so the modal window's content 
is never shown.

We have worked around the problem by overriding clickLink(String, boolean) and 
setupRequestAndResponse() as follows:

    private boolean m_handlingAjaxRequest = false;
    
    @Override
    public synchronized void clickLink(String path, boolean isAjax)
    {
        m_handlingAjaxRequest = isAjax;
        super.clickLink(path, isAjax);
        m_handlingAjaxRequest = false;
    }
    
    @Override
    public synchronized WebRequestCycle setupRequestAndResponse() {
        WebRequestCycle result = super.setupRequestAndResponse();
        if (m_handlingAjaxRequest) {
            // Set AJAX header.
            getServletRequest().addHeader(
                        "Wicket-Ajax", "true");
            // *Don't* copy it to the response, even though
            // MockWebApplication's setupRequestAndResponse() does.
        }
        return result;
    }

(I found that if I copied the 'Wicket-Ajax' header to the response, as done by 
MockWebApplication's setupRequestAndResponse(), it caused all AJAX clicks to 
misbehave.)

Hence, it would seem that if BaseWicketTester's clickLink(String, boolean) 
method were modified to set the 'Wicket-Ajax' header as appropriate, modal 
windows -- and, presumably, any other things that rely on the request returning 
true from isAjax() -- would work as expected.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to