2013-10-24 23 views
1

當用戶回到他們的會話時,我有一個監聽器檢查一些get參數(表示身份驗證)。問題是我不能從這一點重新初始化UI邏輯(我相信),因爲它不在UIDL事務中。無論如何,只要它觸及UI.getCurrent()的第一個調用,我的UI就會以NPE的形式拋出。使用@PreserveOnRefresh(Vaadin 7),我可以在UIDL請求中爲每個「reinit」調用一個偵聽器嗎?

如何在每個頁面刷新時獲得安全鉤子?

回答

1

我無法找到一個簡單的'刷新'偵聽器,但設法通過組合RequestHandler和UriFragmentChangedListener來獲得行爲。

ui.getPage().addUriFragmentChangedListener(new Page.UriFragmentChangedListener() {   
    @Override 
    public void uriFragmentChanged(final Page.UriFragmentChangedEvent event) { 
     // ...proceed with application setup 
    } 
}); 

ui.getSession().addRequestHandler(new RequestHandler() { 
    @Override 
    public boolean handleRequest(VaadinSession session, VaadinRequest request, VaadinResponse response) { 
     if (containsAuthInfo(request)) { 
      final String redirect = "<html><body></body><script>window.location=\"" 
       + APP_URL + "#" + UUID.randomUUID() + "\";</script></body></html>"; 
      response.getOutputStream().write(redirect.getBytes()); 
      return true; 
     } 
     return false; 
    } 
}); 
2

Vaadin 7.2引入了一個稱爲refresh(VaadinRequest)UI其瀏覽器刷新之後調用時UI具有@PreserveOnRefresh註釋方法。

相關問題