有沒有辦法做到這一點?Wicket setPageExpiredErrorPage僅適用於特定頁面?
我聽說過有關實施的RequestCycle,如何實現這一點?
試過How can I get the responsePage from a RequestCycle in Wicket 1.5?這個,但沒有工作。
有沒有辦法做到這一點?Wicket setPageExpiredErrorPage僅適用於特定頁面?
我聽說過有關實施的RequestCycle,如何實現這一點?
試過How can I get the responsePage from a RequestCycle in Wicket 1.5?這個,但沒有工作。
您在Wicket中獲得PageExpiredException
的原因是因爲Wicket無法找到該頁面。沒有辦法確定不再可用的頁面的類型,因爲,頁面實際上不再存在。它不復存在,遇見了它的製造者,失去了生命,安息了,它的生命週期現在是'歷史的,踢了一桶。這是一個前頁面。
所以Wicket唯一的辦法是服務於PageExpiredException
,並且沒有辦法(在Wicket本身)檢索試圖重新生成的頁面。
現在你可以嘗試做的是將最後一次呈現的頁面的類存儲在會話中,並在你的RequestCycleListener實現中使用onException()並返回適當的請求處理程序。在代碼:
@Override
public void onRequestHandlerExecuted(RequestCycle cycle, IRequestHandler handler) {
Class<? extends Page> p = null;
if(handler instanceof IPageRequestHandler)
p = ((IPageRequestHandler)handler).getPageClass();
else if(handler instanceof IComponentRequestHandler)
p = ((IComponentRequestHandler)handler).getComponent().getPage().getClass();
MySession.get().setLastPageClass(p);
}
@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
Class<? extends Page> pageClass MySession.get().getLastPageClass();
... return some handler based on your logic
}
您可能要爲您在onRequestHandlerExecuted
更IRequestHandler implementations。
如果我理解正確,只有在pageExpired發生在特定頁面時纔想重定向用戶?你可以嘗試這樣的事情在你實現應用的:
getRequestCycleListeners().add(new AbstractRequestCycleListener() {
@Override
public IRequestHandler onException(RequestCycle cycle, Exception e) {
if(e.getClass().equals(PageExpiredException.class)) {
//check if url in request responds to correct mounted page type
if(isPageUrl(cycle.getRequest().getUrl()))) {
return new RenderPageRequestHandler(new PageProvider(MyPage.class));
} else {
return super.onException(cycle, e);
}
} else {
return super.onException(cycle, e);
}
}
}
這是假設幾件事情 - 在你得到了異常的頁面已經被安裝,並且您將能夠解析請求的URL,以確保就是這樣。 我還沒有測試過,但我們正在做類似的事情。
它沒有安裝。它只是從鏈接調用她的setResponse:/ – SSV
嗨,我想你誤會了我的問題:) 我想要的是簡單地重定向用戶,而pageexpired發生到另一個頁面,所以他不會在他的頁面上看到「Page Expired」。我只想在一個特定的頁面上,所以getApplicationSettings()。setPageExpiredErrorPage(PAGE.class)不是一個好的選擇:( – SSV
而我的答案圍繞通用setPageExpiredErrorPage工作...嘗試它 –