Wicketを使用して別のページにリダイレクトするにはどうすればよいですか? IIRC、いくつかの例外をコンストラクターでスローする必要がありますが、どれを覚えているかは覚えていません。前もって感謝します。
あなた自身の答えで述べたように、RestartResponseAtInterceptPageException
をスローすることでそれを実行しますが、それは実際には現在のページでの継続的なリダイレクト(多くの場合、承認プロセスの一部)でリダイレクトを許可するシステムの一部です。それがあなたの状況ではないが、それでも処理を中断する何かをしなければならない場合は、RestartResponseException
をスローする方がよいでしょう。
RestartResponseAtInterceptPageException
について私が知っている主要な使用法は、「ログインページへのリダイレクト」プロセスです。ロールベースの認証を使用している場合、ログインしていないと判断したIAuthorizationStrategy
の実装は、構成済みのIUnauthorizedComponentInstantiationListener
、通常はログインしていない場合にこの例外をスローするAuthenticatedWebApplication
に信号を送り、構成済みのログインページ。 (ログインしているのに権限がない場合は、何か他のことが起こります...)。
実際のリダイレクトはPageMap
によって行われます。この場合も、移動しようとしたページが記憶されています。ログインが成功した後、ログインページは、Component
のメソッドであるcontinueToOriginalDestination()
を呼び出して、最初に試みていたページに移動するように要求し、PageMap
から記憶されたページを取得します。
この認証プロセスにはいくつかの優れた サンプルコード がありますが、例外とインターセプトが裏で隠れています。
Client-redirect(HTTP 302、ブラウザーのURLの変更)を使用して、改ページにリダイレクトします。
import org.Apache.wicket.RestartResponseException;
import org.Apache.wicket.request.mapper.parameter.PageParameters;
...
throw new RestartResponseException(
TargetWicketPage.class,
new PageParameters().set("param1", "value1"));
サーバーのリダイレクト/フォワードを使用して、改ページにリダイレクトします(ブラウザーの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));
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);
HTTP 302(「一時的に移動」)を使用してURLにリダイレクトします。
import org.Apache.wicket.request.flow.RedirectToUrlException;
...
throw new RedirectToUrlException("http://targetURL");
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);
すべてのクイック検索*Exception.Java
改札内のファイルはそれを明らかにした。 RestartResponseAtInterceptPageException
をスローする必要があります:
public MyPage() {
...
if (redirect) {
throw new RestartResponseAtInterceptPageException(targetPage);
}
...
}
見つけた
getRequestCycle().setResponsePage(MyOtherPage.class);
少なくとも改札6で機能しています。サーバー側で機能し、URLも書き換えます。多分それは例外を使用するよりも少し速いです。
あなたは使うことができます
setResponsePage(new RedirectPage( "/"));
または
setResponsePage(HomePage.class);
または
新しいRestartResponseException(HomePage.class);をスローします。