Java 为什么异常hanler中的RestartResponseException不';是否无法重定向到其他页面?

Java 为什么异常hanler中的RestartResponseException不';是否无法重定向到其他页面?,java,wicket,Java,Wicket,我在异常处理程序(IRequestCycleListener)中使用RestartResponseException在登录页面上进行重定向,但它不起作用。我在日志中看到异常,但在UI中没有更改 @Override public IRequestHandler onException(RequestCycle cycle, Exception ex) { if (couldNotLock) { getSessi

我在异常处理程序(IRequestCycleListener)中使用RestartResponseException在登录页面上进行重定向,但它不起作用。我在日志中看到异常,但在UI中没有更改

        @Override
        public IRequestHandler onException(RequestCycle cycle, Exception ex) {
            if (couldNotLock) {
                getSessionStore().invalidate(cycle.getRequest());
                throw new RestartResponseException(LoginPage.class);
            }

            return null;
        }

即使在问题的评论中有你额外的信息,你所面临的问题仍然不清楚

我将尝试猜测:您的登录页面检查用户是否已经登录,并且只是重定向到应用程序的登录/主页

要修复此问题,您需要使整个会话无效:

@Override
public IRequestHandler onException(RequestCycle cycle, Exception ex) {
    if (couldNotLock) {
       Session.get().invalidate();    // !!!
       throw new RestartResponseException(LoginPage.class);
    }

    return null;
}

尝试抛出新的RestartResponseAtInterceptPageException(LoginPage.class)而不是RestartResponseException

如果没有其他帮助,您可以使用javascript修改页面的URL

@Override
public void renderHead(IHeaderResponse response) {
    super.renderHead(response);
    response.render(JavaScriptHeaderItem.forScript("window.history.pushState(\"object or string\", \"" + pageTitle + "\", \"" + pageUrl + "\")"));
}
对于AJAX:

    AjaxRequestTarget target = optional.get();
    target.prependJavaScript("window.history.pushState(\"object or string\", \"" + pageTitle + "\", \"" + pageUrl + "\")");

当它不起作用时,实际的行为是什么?你看到哪一页?在DevTools>Network选项卡中是否看到重定向响应(状态代码==302)?对不起,我写错了。如果没有会话失效(仅使用RestartResponseException),页面将使用代码200刷新,但不会重定向,我看到的页面与以前相同。使用会话无效,页面不会刷新,我在devtools中看不到任何请求。我和以前一样看到这一页。如果我使用F5,我会看到登录页面,但它不是重定向IO(在devtools中仍然没有请求),谢谢您的回答。我尝试了一下,得到了同样的结果,我仍然看到主页,但在点击任何按钮或刷新页面后,F5页面变为登录页面。我希望在没有点击或刷新等额外操作的情况下获得登录页面。我认为RestartResponseException不起作用,因为我将其更改为NullPointerException的实验,并得到了相同的结果,我得出结论,页面更改是由会话无效引起的。谢谢您的回答。我试过了,没有发现与RestartResponseException有什么区别。仍然没有重定向。这是一个有趣的想法,但如何在我的异常处理程序(IRequestCycleListener)中实现它呢?我想我不能。您可以在LoginPage类中重写renderHead(),以便它始终设置正确的url。