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

And*_*ger 0 java wicket

这样做是为了显示PageExpiredPage几秒钟可见,并自动重定向HomePage,当网络会话过期.

通过以下代码PageExpiredPage显示带有书签链接的显示HomePage.

PageExpiredPage.html:

Your session expired, log in anew by clicking
<a wicket:id="lnk-home-page" href="#"> here</a>
...
Run Code Online (Sandbox Code Playgroud)

PageExpiredPage.java:

final Application app = Session.get().getApplication();
BookmarkablePageLink<? extends Page> lnkHomePage = new BookmarkablePageLink<? extends Page>("lnk-home-page", app.getHomePage());
add(lnkHomePage);
...
Run Code Online (Sandbox Code Playgroud)

如何在Wicket中编码PageExpiredPage,显示后,HomePage在可配置的秒数后自动重定向到?

Chr*_*ter 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)));
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以getHomePage()直接传递返回值- 不需要newInstance():

public class PageExpiredPage extends YourBasePage {
    public PageExpiredPage () {
        add(new RedirectBehavior(Application.get().getHomePage(), 5));
    }
}
Run Code Online (Sandbox Code Playgroud)