使用@PreserveOnRefresh(Vaadin 7),我可以为每个" reinit"调用一个监听器吗?在UIDL请求中?

时间:2013-10-24 14:19:27

标签: vaadin vaadin7

当用户回到他们的会话时,我有一个监听器检查一些get参数(表示身份验证)。问题是我不能从那一点重新初始化UI逻辑(我相信)因为它不在UIDL事务中。无论如何,我的UI在它第一次调用UI.getCurrent()时就会抛出NPE。

如何在每次刷新页面时获得安全挂钩?

2 个答案:

答案 0 :(得分:2)

Vaadin 7.2在refresh(VaadinRequest)中引入了一个名为UI的方法,当UI具有@PreserveOnRefresh注释时,在浏览器刷新后调用该方法。

答案 1 :(得分:1)

我无法找到一个简单的'refresh'监听器,但设法通过组合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;
    }
});