有没有办法做到这一点?
我听说过有关已实现的RequestCycle的一些内容,如何实现它?
尝试How can I get the responsePage from a RequestCycle in Wicket 1.5?这个,但不起作用。
答案 0 :(得分:2)
你在Wicket中获得PageExpiredException
的原因是因为Wicket无法找到该页面。无法确定不再可用的页面类型,因为页面实际上不再存在。它不复存在,遇到了它的制造者,失去了生命,安息,它的生命周期现在已经成为现实,被踢了一把。这是一个前页面。
所以Wicket唯一的办法就是为PageExpiredException
提供服务,并且没有办法(在Wicket本身)检索试图复活的页面。
现在您可以尝试做的是将最后呈现的页面的类存储在会话中,并在onException()的RequestCycleListener实现中使用它,并返回相应的请求处理程序。在代码中:
@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。
答案 1 :(得分:1)
如果我理解正确,只有在特定页面发生pageExpired时才想重定向用户?您可以在Application的实现中尝试这样的事情:
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以确保它是它。 我没有测试过,但我们正在做类似的事情。