2017-08-31 279 views
2

我已经从一个例子,我找到工作,这里的链接到Git的回购:Vaadin春季安全

https://github.com/basakpie/vaadin8-spring-security-sample

它的伟大工程,这正是我需要的,除了一两件事:我需要服务器推送。

这是我到目前为止已经完成:

  • 加入Vaadin推依赖
  • 添加以下行MainUI.init()方法的开始:

    getPushConfiguration().setTransport(Transport.WEBSOCKET); 
    getPushConfiguration().setPushMode(PushMode.AUTOMATIC); 
    
  • 将以下字段添加到MainUI类中:

    Label time = new Label(); 
    Timer timer; 
    
  • 添加了以下方法给MainUI类:

    private void updateTime() { 
        access(() -> time.setValue(String.format("The server-side time is %s", LocalTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"))))); 
    } 
    
  • 最后,增加了以下的MainUI.init的end()方法:

    timer = new Timer(); 
    timer.schedule(new TimerTask() { 
        @Override 
        public void run() { 
         updateTime(); 
        } 
    }, 1000L, 1000L); 
    

它主要作品。我能够看到当前系统时间每秒更新一次。但是当我在浏览器中刷新时,应用程序只会挂在vaadin加载微调器上。没有错误消息。

我曾尝试以下办法:从init()

添加方法

public void attach() { 
    getPushConfiguration().setTransport(Transport.WEBSOCKET); 
    getPushConfiguration().setPushMode(PushMode.AUTOMATIC); 
} 

和去除getPushConfiguration线这解决了悬挂问题,但推不工作 - 无错误,只是时间根本不显示。

我也尝试在MainUI上添加@Push注释。这会导致与之前相同的行为 - 冻结刷新。

我该如何解决这个问题?欢迎大家提出意见。

回答

0

试试下面的方法:

  1. 添加@Push到MainUI。Java文件

    @Push(transport = Transport.WEBSOCKET,value = PushMode.AUTOMATIC)

  2. 相反的:

    getPushConfiguration().setTransport(Transport.WEBSOCKET); getPushConfiguration().setPushMode(PushMode.AUTOMATIC);

  3. 添加@PreDestroy当您从mainUI

    @PreDestroy void destroy() { timer.cancel(); }

0导航退出计时器

找到完整的修改后的代码HERE

https://gist.github.com/cansoftinc/351452ee0e616d353519f147c4a961ba

+1

感谢您的提示。不幸的是我看到相同的行为:( – NickJ