setRecreateMountedPagesAfterExpiry将URL更改为servlet

时间:2015-12-07 17:13:54

标签: wicket wicket-6

我们最近将应用程序从Wicket 1.5.8升级到6.22.0。我想在会话过期后发生操作时将所有页面设置为重定向到特定页面(SessionExpiredPage)。

public class WicketApplication<HttpsRequestCycleProcessor> extends WebApplication
{
    // other methods omitted

    public void init()
    {
        super.init();

        getApplicationSettings().setPageExpiredErrorPage(SessionExpiredPage.class);
        getApplicationSettings().setAccessDeniedPage(SessionExpiredPage.class);
        getPageSettings().setRecreateMountedPagesAfterExpiry(false);

        // several other mounted links omitted      
        mount(new MountedMapper("landingpage", LandingPage.class, new UrlPathPageParametersEncoder()));

        // add your configuration here
        getComponentInstantiationListeners().add(new SpringComponentInjector(this));
    }
}

将setRecreateMountedPagesAfterExpiry设置为false有助于在会话到期时重定向多个页面,但是会产生意想不到的后果。该应用程序包含几个servlet页面。其中一个是从wicket页面访问的,如下所示:

@RequireHttps
public class SubscriptionPage extends WebPage
{
    @Override
    public void onSubmit()
    {
        String redirectUrl = null;

        // condition checking code omitted
        redirectUrl= "SubsCartTempServlet?subsunit=6";

        // more code omitted
        getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(redirectUrl));
    }
}

网址已从有效的http://localhost:8080/LatinParserK/SubsCartTempServlet?subsunit=6更改为 http://localhost:8080/LatinParserK/wicket/SubsCartTempServlet?subsunit=6,但失败了。

任何人都可以解释如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

似乎Wicket页面和Servlet的路径有不同的深度。
使用org.apache.wicket.request.UrlUtils#rewriteToContextRelative(relativeUrl, cycle)相对于上下文根创建Servlet的URL。

答案 1 :(得分:0)

onSubmit()下的最后一行替换为:

String relativeUrl = UrlUtils.rewriteToContextRelative(redirectUrl, getRequestCycle());
getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(relativeUrl));

更正了servlet的URL。