Wicket:如何重定向到另一个页面?

Mot*_*Mot 20 java redirect wicket

如何使用Wicket重定向到另一个页面?IIRC,必须在构造函数中抛出一些异常,但我不记得是哪一个.提前致谢.

Don*_*oby 29

RestartResponseAtInterceptPageException正如你在自己的回答中所指出的那样,投掷遗嘱会做到这一点,但这实际上是允许在当前页面(通常是授权过程的一部分)进行重定向的系统的一部分.如果那不是你的情况,但是你仍然需要做一些中断处理的事情,那么最好扔掉一个RestartResponseException.

我知道的主要用法RestartResponseAtInterceptPageException是"重定向到登录页面"过程.如果您正在使用基于角色的身份验证,则IAuthorizationStrategy确定您未登录的实现将发出已配置的信号IUnauthorizedComponentInstantiationListener,通常是AuthenticatedWebApplication如果您未登录则会引发此异常,并重定向到已配置的登录页面.(如果您已登录但未经授权,则会发生其他情况......).

实际的重定向由the完成PageMap,在这种情况下也会记住您尝试访问的页面.成功登录后,登录页面可以要求您通过调用将您发送到最初尝试的页面continueToOriginalDestination(),这是一个方法,Component并从中检索记住的页面PageMap.

这个身份验证过程有一些很好的示例代码,但异常和拦截在某种程度上隐藏在幕后.


sot*_*her 23

使用客户端重定向(HTTP 302,浏览器的URL更改)重定向到wicket页面:

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

使用服务器重定向/转发重定向到wicket页面(浏览器的URL保持不变):

自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));
Run Code Online (Sandbox Code Playgroud)

在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);
Run Code Online (Sandbox Code Playgroud)

使用HTTP 302("暂时移动")重定向到URL:

import org.apache.wicket.request.flow.RedirectToUrlException;
...
throw new RedirectToUrlException("http://targetURL");
Run Code Online (Sandbox Code Playgroud)

使用HTTP 301重定向到URL("永久移动",SEO友好):

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


Mot*_*Mot 5

快速搜索*Exception.javawicket中的所有文件显示它.一个人必须扔一个RestartResponseAtInterceptPageException:

public MyPage() {
   ...
   if (redirect) {
       throw new RestartResponseAtInterceptPageException(targetPage);
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)