WicketTester AJAX requests don't always include the 'parametersForNextRequest'
------------------------------------------------------------------------------

                 Key: WICKET-1734
                 URL: https://issues.apache.org/jira/browse/WICKET-1734
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.3.3
            Reporter: David Shepherdson
            Priority: Minor


If the RequestCycle already exists (i.e. RequestCycle.get() returns non-null), 
BaseWicketTester's executeAjaxEvent() and executeBehavior() don't call 
setupRequestAndResponse(), meaning that they don't transfer the 'parameters for 
next request' into the servlet request before processing. Therefore, if you set 
some parameters and then execute an AJAX behaviour or event, your parameters 
won't always be included when the request is processed.

We're working around the problem by overriding the two affected methods as 
follows:

    @Override
    public void executeAjaxEvent(Component component, String event) {
        if (RequestCycle.get() != null) {
            // The super implementation won't initialise the request,
            // and hence won't copy across the parametersForNextRequest,
            // so we need to do it now.
            
getServletRequest().getParameterMap().putAll(getParametersForNextRequest());
            getParametersForNextRequest().clear();
        }

        super.executeAjaxEvent(component, event);
    }

    @Override
    public void executeBehavior(AbstractAjaxBehavior behavior) {
        // Need to create a 'throwaway' request cycle first so that the callback
        // URL can be generated.
        WebRequestCycle cycle = createRequestCycle();
        CharSequence url = behavior.getCallbackUrl(false);
        // Save the parameters for the next request; we'll need them in a
        // moment, and they'll be cleared by setupRequestAndResponse()
        Map params = new HashMap(getParametersForNextRequest());
        cycle = setupRequestAndResponse(true);
        getServletRequest().setRequestToRedirectString(url.toString());
        // Restore parameters before processing the request.
        getServletRequest().getParameterMap().putAll(params);
        // Now we're ready to go!
        processRequestCycle(cycle);
    }



-- 
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