有没有办法做到这一点?
我听说了一些关于已实现的 RequestCycle,如何实现它?
尝试过如何从 Wicket 1.5 中的 RequestCycle 获取 responsePage?这个,但不起作用。
有没有办法做到这一点?
我听说了一些关于已实现的 RequestCycle,如何实现它?
尝试过如何从 Wicket 1.5 中的 RequestCycle 获取 responsePage?这个,但不起作用。
您在 Wicket 中获得 a 的原因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
如果我理解正确,您只想在 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 以确保它是它。我还没有测试过,但我们正在做类似的事情。