如何在几秒钟内自动从一个页面重定向到另一个页面

时间:2011-08-02 08:30:23

标签: java wicket

我们的想法是显示{{1>} 可见几秒自动重定向PageExpiredPage,当网络会话到期

通过以下代码,HomePage会显示指向其上PageExpiredPage的可收藏链接。

  

PageExpiredPage.html:

HomePage
  

PageExpiredPage.java:

Your session expired, log in anew by clicking
<a wicket:id="lnk-home-page" href="#"> here</a>
...

如何在Wicket中编码显示final Application app = Session.get().getApplication(); BookmarkablePageLink<? extends Page> lnkHomePage = new BookmarkablePageLink<? extends Page>("lnk-home-page", app.getHomePage()); add(lnkHomePage); ... ,在可配置的秒数后自动重定向到PageExpiredPage

2 个答案:

答案 0 :(得分:6)

比RedirectPage更好的解决方案是自定义行为。 RedirectPage的一个明显问题是你不能使用公共基类来构建页面。

public class RedirectBehavior extends Behavior {

    private final Class<? extends Page> page;
    private final int redirectInSeconds;

    public RedirectBehavior(Class<? extends Page> page, int redirectInSeconds) {
        this.page = page;
        this.redirectInSeconds = redirectInSeconds;
    }

    @Override
    public void renderHead(Component component, IHeaderResponse response) {
        response.renderString(String.format("<meta http-equiv='refresh' content='%d;URL=%s' />", redirectInSeconds,
                RequestCycle.get().urlFor(page, null)));
    }
}

这样您就可以直接从getHomePage()传递返回值 - 无需newInstance()

public class PageExpiredPage extends YourBasePage {
    public PageExpiredPage () {
        add(new RedirectBehavior(Application.get().getHomePage(), 5));
    }
}

答案 1 :(得分:2)

我可能错过了一些东西,但在我看来RedirectPage可以做到这一点:

  

让浏览器重定向的页面。如果您想将浏览器定向到某些外部网址,例如Google等,或者如果您想重定向到Wicket页面,但是有延迟,请使用此功能。(我的重点)

构造

RedirectPage(Page page, int waitBeforeRedirectInSeconds)

RedirectPage扩展org.apache.wicket.markup.html.WebPage并接受org.apache.wicket.Page作为第一个参数。