当用户回到他们的会话时,我有一个监听器检查一些获取参数(表示身份验证)。问题是我无法从那时起重新初始化 UI 逻辑(我相信),因为它不在 UIDL 事务中。无论如何,我的 UI 在第一次调用 UI.getCurrent() 时就会抛出 NPE。
如何在每次页面刷新中获得安全挂钩?
Vaadin 7.2 引入了一个名为refresh(VaadinRequest)
in的方法UI
,当UI
有@PreserveOnRefresh
注解时,在浏览器刷新后调用该方法。
我无法找到一个简单的“刷新”侦听器,但设法通过组合 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;
}
});