Как автоматически перенаправить с одной страницы на другую в течение нескольких секунд - PullRequest
0 голосов
/ 02 августа 2011

Идея состоит в том, чтобы отобразить PageExpiredPage, который виден в течение нескольких секунд и автоматически перенаправляет на HomePage, когда веб-сеанс истекает .

С помощью следующего кода PageExpiredPage отображается с закладкой для ссылки на HomePage на нем.

PageExpiredPage.html:

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

PageExpiredPage.java:

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

Как кодировать в Wicket, что PageExpiredPage при отображении автоматически перенаправляет на HomePage через настраиваемое количество секунд?

Ответы [ 2 ]

6 голосов
/ 03 августа 2011

Лучшим решением, чем 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));
    }
}
2 голосов
/ 02 августа 2011

Возможно, я что-то упустил, но мне кажется, что RedirectPage может сделать именно это:

Страница, позволяющая браузеру перенаправлять. Используйте это, если вы хотите направить браузер на какой-нибудь внешний URL, например, Google и т. Д. или если вы хотите перенаправить на страницу Wicket, но с задержкой.

Конструктор:

RedirectPage(Page page, int waitBeforeRedirectInSeconds)

RedirectPage расширяет org.apache.wicket.markup.html.WebPage и принимает org.apache.wicket.Page в качестве первого аргумента.

...