如何使用Wicket 6在服务器端转发页面请求

如何使用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.

在某些情况下,我必须将对Wicket页面的请求传递到服务器端的另一个Wicket页面,即转发在浏览器地址栏中维护URL,但将页面参数传递到第二个页面

在Wicket 1.5之前,我可以

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可能更好。另请参见: