當用戶回到他們的會話時,我有一個監聽器檢查一些get參數(表示身份驗證)。問題是我不能從這一點重新初始化UI邏輯(我相信),因爲它不在UIDL事務中。無論如何,只要它觸及UI.getCurrent()的第一個調用,我的UI就會以NPE的形式拋出。使用@PreserveOnRefresh(Vaadin 7),我可以在UIDL請求中爲每個「reinit」調用一個偵聽器嗎?
如何在每個頁面刷新時獲得安全鉤子?
當用戶回到他們的會話時,我有一個監聽器檢查一些get參數(表示身份驗證)。問題是我不能從這一點重新初始化UI邏輯(我相信),因爲它不在UIDL事務中。無論如何,只要它觸及UI.getCurrent()的第一個調用,我的UI就會以NPE的形式拋出。使用@PreserveOnRefresh(Vaadin 7),我可以在UIDL請求中爲每個「reinit」調用一個偵聽器嗎?
如何在每個頁面刷新時獲得安全鉤子?
我無法找到一個簡單的'刷新'偵聽器,但設法通過組合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;
}
});
Vaadin 7.2引入了一個稱爲refresh(VaadinRequest)
在UI
其瀏覽器刷新之後調用時UI
具有@PreserveOnRefresh
註釋方法。