You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "David Shepherdson (JIRA)" <ji...@apache.org> on 2007/10/12 13:40:51 UTC

[jira] Created: (WICKET-1066) Wicket-Ajax header always false with BaseWicketTester

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.


[jira] Resolved: (WICKET-1066) Wicket-Ajax header always false with BaseWicketTester

Posted by "Gerolf Seitz (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gerolf Seitz resolved WICKET-1066.
----------------------------------

    Resolution: Duplicate
      Assignee: Gerolf Seitz

duplicate of WICKET-1199

> 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-beta3, 1.3.0-beta4
>            Reporter: David Shepherdson
>            Assignee: Gerolf Seitz
>             Fix For: 1.3.0-rc2
>
>
> 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.


[jira] Updated: (WICKET-1066) Wicket-Ajax header always false with BaseWicketTester

Posted by "Frank Bille Jensen (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Frank Bille Jensen updated WICKET-1066:
---------------------------------------

    Fix Version/s:     (was: 1.3.0-rc1)
                   1.3.0-rc2

> 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-beta3, 1.3.0-beta4
>            Reporter: David Shepherdson
>             Fix For: 1.3.0-rc2
>
>
> 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.


[jira] Closed: (WICKET-1066) Wicket-Ajax header always false with BaseWicketTester

Posted by "David Shepherdson (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/WICKET-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Shepherdson closed WICKET-1066.
-------------------------------------


Using 1.3 (final), I've removed my workarounds and everything works normally. Thank you!

> 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-beta3, 1.3.0-beta4
>            Reporter: David Shepherdson
>            Assignee: Gerolf Seitz
>             Fix For: 1.3.0-rc2
>
>
> 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.