1

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

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

4

2 回答 2

2

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

于 2014-08-06T16:56:16.670 回答
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;
    }
});
于 2013-10-24T14:54:16.917 回答