为什么异常hanler中的restartresponseexception不重定向到其他页面?

sqserrrh  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(573)

我在异常处理程序(irequestcyclelistener)中使用restartresponseexception在登录页上重定向,但它不起作用。我在日志中看到异常,但在ui中没有更改。

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

            return null;
        }
yeotifhr

yeotifhr1#

试着扔 new RestartResponseAtInterceptPageException(LoginPage.class) 而不是restartresponseexception

4bbkushb

4bbkushb2#

如果没有其他帮助,您可以使用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 + "\")");
huwehgph

huwehgph3#

即使你在问题的评论中提供了额外的信息,你仍然不清楚你面临什么样的问题。
我将尝试猜测:您的登录页检查用户是否已经登录,只是重定向到您的应用程序的登录/主页。
要解决此问题,您需要使整个会话无效:

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

    return null;
}

相关问题