Wicket: how to redirect to another page?

后端 未结 5 1862
花落未央
花落未央 2020-12-24 02:36

How do I redirect to another page using Wicket? IIRC, some exception has to be thrown in the constructor, but I don\'t remember which one. Thanks in advance.

5条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-24 03:22

    Redirect to a wicket page, using a client-redirect (HTTP 302, the browser's URL changes):

    import org.apache.wicket.RestartResponseException;
    import org.apache.wicket.request.mapper.parameter.PageParameters;
    ...
    throw new RestartResponseException(
        TargetWicketPage.class, 
        new PageParameters().set("param1", "value1")); 
    

    Redirect to a wicket page, using a server redirect / forward (the browser's URL remains unchanged):

    Since Wicket 1.5RC5.1:

    import org.apache.wicket.RestartResponseException;
    import org.apache.wicket.request.handler.PageProvider;
    import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
    import org.apache.wicket.request.mapper.parameter.PageParameters;
    ...
    throw new RestartResponseException(
        new PageProvider(
            TargetWicketPage.class, 
            new PageParameters().set("param1", "value1")), 
        RedirectPolicy.NEVER_REDIRECT));
    

    Before Wicket 1.5RC5.1:

    import org.apache.wicket.request.RequestHandlerStack.ReplaceHandlerException;
    import org.apache.wicket.request.handler.PageProvider;
    import org.apache.wicket.request.handler.RenderPageRequestHandler;
    import org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
    import org.apache.wicket.request.mapper.parameter.PageParameters;
    ...
    throw new ReplaceHandlerException(
        new RenderPageRequestHandler(
            new PageProvider(
                TargetWicketPage.class, 
                new PageParameters().set("param1", "value1")), 
            RedirectPolicy.NEVER_REDIRECT), 
        true);
    

    Redirect to an URL, using HTTP 302 ("Moved Temporarily"):

    import org.apache.wicket.request.flow.RedirectToUrlException;
    ...
    throw new RedirectToUrlException("http://targetURL");
    

    Redirect to an URL, using HTTP 301 ("Moved Permanently", SEO friendly):

    import org.apache.wicket.request.flow.RedirectToUrlException;
    import javax.servlet.http.HttpServletResponse;
    ...
    throw new RedirectToUrlException("http://targetURL", 
        HttpServletResponse.SC_MOVED_PERMANENTLY);
    

提交回复
热议问题