2011-08-02 101 views
0

內自動重定向從一個網頁到另一個想法是顯示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); 
... 

如何檢票代碼的PageExpiredPage,顯示時,自動重定向到HomePage經過可配置的秒數?

+0

你可以做到這一點很簡單地使用Javascript的「過期」頁面,但顯然這需要用戶啓用Javascript。任何你沒有考慮過的原因? –

+0

@Anthony我希望Wicket能夠使用Javascript並使用Java進行編碼。一個原因是他的URL編碼策略可能會改變。如果發生這種情況,或者您將主頁更改爲其他課程,則每次需要更新「過期」頁面上的Javascript時。 –

回答

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)); 
    } 
} 
+0

很好的回答!確切地說,我在找什麼。 –

2

我可能錯過了一些東西,但在我看來,RedirectPage可以做到這一點:

頁,讓瀏覽器重定向。如果您希望將瀏覽器指向某些外部URL(如Google等),請使用此選項。或者如果您要重定向到Wicket頁面,但延遲。(我的重點)

構造:

RedirectPage(Page page, int waitBeforeRedirectInSeconds) 

RedirectPage延伸org.apache.wicket.markup.html.WebPage並接受org.apache.wicket.Page作爲第一個參數。

+0

感謝您的回答。我沒有選擇這個解決方案的原因是Session.get()。getApplication()。getHomePage()返回類型Class <?擴展Page>,而不是頁面。我認爲解決方案是向WebApplication實現添加另一種方法,如getHomePageInstance()和cast((MyWebApplication)Session.get()。getApplication())。getHomePageInstance()。 - 使用Class.newInstance()看起來很醜。 –