异步更新vaadin组件(Asynchronously update vaadin componen

2019-07-30 12:29发布

我有更新vaadin按钮的标题每3秒这段代码。

TimerTask tt = new TimerTask() {

    @Override
    public void run() {
        try {
            logger.debug("adding l to button's caption");
            btn.setCaption(eventsButton.getCaption() + "l");
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        }
    }
};
Timer t = new Timer(true);
t.scheduleAtFixedRate(tt, 0, 3000);

然而,尽管它每3秒(由日志文件判断)执行它不能改变按钮的标题。 如何访问vaadin的GUI组件从另一个线程?

Answer 1:

有一个名为ICEPush这不正是我需要的插件。

https://vaadin.com/directory#addon/icepush



Answer 2:

问题和各种解决方案的合理全面的讨论,可以发现这里 ; 终极版:“香草” Vaadin简单地遵循用户发起的请求 - 响应范例。

你需要使用一个附加的启动从服务器浏览器中的变化。

旁白:你应该从你自己的线程更新组件时(而不是正常的请求线程)的应用对象的同步操作 - 因为你可能会得到“同步”的错误。



Answer 3:

由于Vaadin的工作方式,在服务器端做异步用户界面的变化不会反映在客户端上。 在复习插件能够使用户界面的变化,即使用户不启动事务。

final Refresher refresher = new Refresher();
refresher.setRefreshInterval(3000);
addComponent(refresher);

refresher.addListener(new RefreshListener() {    
    @Override
    public void refresh(final Refresher source) {
        try {
            logger.debug("adding l to button's caption");
            btn.setCaption(eventsButton.getCaption() + "l");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }
}


文章来源: Asynchronously update vaadin components