Wicket
  1. Wicket
  2. WICKET-1703

Allow Intercept Page for POST Requests

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.3.3
    • Fix Version/s: 1.5-RC1
    • Component/s: wicket
    • Labels:
      None

      Description

      By throwing RestartResponseAtInterceptPageException an application can temporarily redirect to an intercept page and then continue to the original destination. This is very handy to show a login page if the user is not authorized, for example. Unfortunately, this only works for GET requests. The problem is that only the current request URL is remembered when the exception is thrown and a redirect to this url is issued later. If the intercepted request is a POST, any request parameters are forgotten.
      The use case I have in mind is that we have a back end system which has it's own login token which we may lose at any time (for example, if the user logs in again using another tool). Assume that the user is trying to add a new item in a form in the web browser. The problem is that we need to use the back end system to process the submit of that form. It would be nice if we could just show the intercept page and then continue the original form submit.

        Activity

        Hide
        Jakub Nabrdalik added a comment -

        I am not sure how the correct solution should look like (maybe it should be just made clear that you cannot use redirectToInterceptPage with form posts) but there is a workaround.

        If you submit the form via AJAX (put AjaxFallbackButton on the form) the problem dissapears, because the client is redirected to the URL from the page (not the target of the ajax request which is a POST to the form/button).

        If you'd like your form to work as without ajax (for example because there is too much to refresh), you just need to add
        setResponsePage(getPage());
        at the end of the ajax submit submit method (i.e.: in ajaxFallbackButton.onSubmit(AjaxRequestTarget target, Form<?> form)), instead of adding stuff to the target.

        Only one redirection is send to the client (so it works the same way as redirect after post) and the page the client is returned to is also fine, because it was the requested by GET, not the POST method.

        The downside is that you have to make sure your form is not submitted without ajax (for example by pressing enter), as described here: http://richard-wilkinson.co.uk/2008/04/05/how-to-stop-non-ajax-form-submits-in-wicket/

        Show
        Jakub Nabrdalik added a comment - I am not sure how the correct solution should look like (maybe it should be just made clear that you cannot use redirectToInterceptPage with form posts) but there is a workaround. If you submit the form via AJAX (put AjaxFallbackButton on the form) the problem dissapears, because the client is redirected to the URL from the page (not the target of the ajax request which is a POST to the form/button). If you'd like your form to work as without ajax (for example because there is too much to refresh), you just need to add setResponsePage(getPage()); at the end of the ajax submit submit method (i.e.: in ajaxFallbackButton.onSubmit(AjaxRequestTarget target, Form<?> form)), instead of adding stuff to the target. Only one redirection is send to the client (so it works the same way as redirect after post) and the page the client is returned to is also fine, because it was the requested by GET, not the POST method. The downside is that you have to make sure your form is not submitted without ajax (for example by pressing enter), as described here: http://richard-wilkinson.co.uk/2008/04/05/how-to-stop-non-ajax-form-submits-in-wicket/
        Hide
        Thomas Mäder added a comment -

        I'd be ready to do the legwork if someone can help me sketch a solution.

        Show
        Thomas Mäder added a comment - I'd be ready to do the legwork if someone can help me sketch a solution.

          People

          • Assignee:
            Igor Vaynberg
            Reporter:
            Thomas Mäder
          • Votes:
            3 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development