[英]Wicket: how to redirect to another page?
如何使用Wicket重定向到另一個頁面? IIRC,必須在構造函數中拋出一些異常,但我不記得是哪一個。 提前致謝。
拋出RestartResponseAtInterceptPageException
將會這樣做,正如您在自己的答案中所指出的那樣,但這實際上是允許在當前頁面(通常是授權過程的一部分)進行重定向的系統的一部分。 如果那不是你的情況,但你仍然需要做一些中斷處理的事情,那么拋出一個RestartResponseException
可能會更好。
我知道的RestartResponseAtInterceptPageException
的主要用法是在“重定向到登錄頁面”過程中。 如果您正在使用基於角色的身份驗證, IAuthorizationStrategy
在確定您未登錄時的實現將發出已配置的IUnauthorizedComponentInstantiationListener
信號,通常是AuthenticatedWebApplication
,如果您未登錄則會拋出此異常,並重定向到已配置登錄頁面。 (如果您已登錄但未經授權,則會發生其他情況......)。
實際的重定向由PageMap
完成,在這種情況下也會記住您嘗試訪問的頁面。 成功登錄后,登錄頁面可以通過調用continueToOriginalDestination()
來請求發送到您最初嘗試的頁面,這是Component
一個方法,並從PageMap
檢索記住的頁面。
這個身份驗證過程有一些很好的示例代碼 ,但異常和攔截在某種程度上隱藏在幕后。
使用客戶端重定向(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"));
使用服務器重定向/轉發重定向到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));
在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);
快速搜索wicket中的所有*Exception.java
文件。 必須拋出RestartResponseAtInterceptPageException
:
public MyPage() {
...
if (redirect) {
throw new RestartResponseAtInterceptPageException(targetPage);
}
...
}
我剛發現
getRequestCycle().setResponsePage(MyOtherPage.class);
它至少在wicket 6中工作。它在服務器端工作並重寫URL。 也許它比使用異常快一點。
您可以使用
setResponsePage(new RedirectPage(“/”));
要么
setResponsePage(HomePage.class);
要么
拋出新的RestartResponseException(HomePage.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.