如何使用Wicket 6在服务器端转发页面请求
在某些情况下,我必须将对Wicket页面的请求传递到服务器端的另一个Wicket页面,即转发在浏览器地址栏中维护URL,但将页面参数传递到第二个页面 在Wicket 1.5之前,我可以如何使用Wicket 6在服务器端转发页面请求,wicket,forward,Wicket,Forward,在某些情况下,我必须将对Wicket页面的请求传递到服务器端的另一个Wicket页面,即转发在浏览器地址栏中维护URL,但将页面参数传递到第二个页面 在Wicket 1.5之前,我可以 public MyPage(PageParameters params) { // some logic here to decide whether and where to forward setRedirect(false); setResponsePage(MyOtherPage.
public MyPage(PageParameters params) {
// some logic here to decide whether and where to forward
setRedirect(false);
setResponsePage(MyOtherPage.class, params);
}
由于
setRedirect(boolean)
不再存在,有没有办法在以后的Wicket版本中实现服务器端转发?一位同事刚刚在这里找到了解决方案:
现在是:
RequestCycle.get().scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(new PageProvider(MyOtherPage.class, params), RenderPageRequestHandler.RedirectPolicy.NEVER_REDIRECT));
一段可怕的代码。。。看起来一点也不优雅,但很有效。在Wicket 6上,您可以以一种更简单的方式重定向到另一个页面,在页面代码中的任意点抛出
RestartResponseAtInterceptPageException
:
throw new RestartResponseAtInterceptPageException(WicketPage.class)
这对我来说很好…你应该能够简单地做到:
throw new RestartResponseException(MyOtherPage.class, params);
我假设这是可行的,但是抛出异常代价很高,不应该是正常程序流的一部分。。。但无可否认,相比之下,我不知道上述解决方案的成本有多高。就我而言,这个问题已经过时了:)这是真的,可能对性能没有那么坏,但将异常转发到另一个页面真的很尴尬,他们应该保留旧方法…通过使用RestartResponseAtInterceptPageException,Wicket将跟踪会话中的初始目标页面,如果执行“org.apache.Wicket.Component.continueToOriginalDestination()”,则会将用户发送回。例如,当您想中断页面呈现以将用户发送到登录页面时,这是合适的,但如果您只想执行简单的重定向,则不适合。对于简单的重定向,org.apache.wicket.RestartResponseException可能更好。另请参见: