使用@PreserveOnRefresh(Vaadin 7),我可以为每个";“雷尼特”;在UIDL请求中?
当用户返回到他们的会话时,我有一个侦听器检查一些get参数(表示身份验证)。问题是我不能从那一点重新初始化UI逻辑(我相信),因为它不在UIDL事务中。无论如何,我的UI在第一次调用UI.getCurrent()时就会抛出NPE使用@PreserveOnRefresh(Vaadin 7),我可以为每个";“雷尼特”;在UIDL请求中?,vaadin,vaadin7,Vaadin,Vaadin7,当用户返回到他们的会话时,我有一个侦听器检查一些get参数(表示身份验证)。问题是我不能从那一点重新初始化UI逻辑(我相信),因为它不在UIDL事务中。无论如何,我的UI在第一次调用UI.getCurrent()时就会抛出NPE 如何在每个页面刷新中获得一个安全的钩子?我找不到一个简单的“刷新”侦听器,但通过组合RequestHandler和UriFragmentChangedListener,成功地获得了该行为 ui.getPage().addUriFragmentChangedListene
如何在每个页面刷新中获得一个安全的钩子?我找不到一个简单的“刷新”侦听器,但通过组合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;
}
});
ui.getPage().addUriFragmentChangedListener(新页面.UriFragmentChangedListener(){
@凌驾
公共无效uriFragmentChanged(最终页面。UriFragmentChangedEvent事件){
//…继续进行应用程序设置
}
});
ui.getSession().addRequestHandler(新的RequestHandler()){
@凌驾
公共布尔handleRequest(VaadinSession会话、VaadinRequest请求、VaadinResponse响应){
如果(包含Sauthinfo(请求)){
最终字符串redirect=“window.location=\”“
+应用程序URL+“\”+UUID.randomUUID()+“\”;”;
response.getOutputStream().write(redirect.getBytes());
返回true;
}
返回false;
}
});
Vaadin 7.2在UI
中引入了一个名为refresh(VaadinRequest)
的方法,当UI
具有@preserveonfresh
注释时,在浏览器刷新后调用该方法