我们最近将应用程序从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,但失败了。
任何人都可以解释如何解决这个问题吗?
答案 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。