首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vaadin 7.1.0推送

Vaadin 7.1.0推送
EN

Stack Overflow用户
提问于 2013-07-16 20:33:45
回答 2查看 3.6K关注 0票数 2

我是Vaadin的新手,只是实现了一个原型来测试功能。目前我使用的是Vaadin Server-Push特性。我喜欢做一个简单的计数器,可以通过按钮来增加。在那之后,我喜欢从不同的浏览器打开这一边,当我计数时,我喜欢所有的浏览器都更新。

现在,我已经知道当前的浏览器是由一个单独的线程更新的。

代码语言:javascript
复制
public class PushTestView extends VerticalLayout implements View {

   private static final long serialVersionUID = -8056849522760207972L;
   private Label counter;

   public void enter(ViewChangeEvent event) {
      removeAllComponents();
      PushTestController controller = PushTestController.getInstance();
      counter = new Label("" + controller.getCounter());
      Button button = new Button("Count up");

      button.addClickListener(new ClickListener() {
         private static final long serialVersionUID = -1437136914245802675L;

         @Override
         public void buttonClick(ClickEvent event) {
            InitializerThread thread = new InitializerThread();
            thread.run();
         }
      });

      addComponent(counter);
      addComponent(button);

   }

   class InitializerThread extends Thread {
      @Override
      public void run() {
         // Init done, update the UI after doing locking
         UI.getCurrent().access(new Runnable() {
            @Override
            public void run() {
               // Here the UI is locked and can be updated
               PushTestController.getInstance().countUp();
               counter.setValue("" + PushTestController.getInstance().getCounter());
               UI.getCurrent().notifyAll();
            }
         });
      }
   }
}

这个视图被嵌入到我的UI中,这个UI由@Push注释。这是我的控制器:

代码语言:javascript
复制
public class PushTestController {

   private static PushTestController instance = new PushTestController();
   private int counter = 0;

   private PushTestController() {
      //Private Constructor for Singleton 
   }

   public static PushTestController getInstance() {
      return instance;
   }

   public int getCounter() {
      return counter;
   }

   public String getCounterString() {
      return "" + counter;
   }

   public void countUp() {
      counter++;
   }
}

我该如何扩展这个示例,使其能够在不同的浏览器中更新UI?

EN

回答 2

Stack Overflow用户

发布于 2013-11-21 00:57:48

票数 3
EN

Stack Overflow用户

发布于 2013-07-16 22:15:15

您必须在您的项目上使用Servlet3.0并编辑您的ivy.xml(或者,如果您使用Maven,则编辑pom.xml)。在此之后,您必须添加@Push注释来为ui启用推送。如下所示:

代码语言:javascript
复制
<dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" conf="default->default" />

在Maven中:

代码语言:javascript
复制
<dependency>
  <groupId>com.vaadin</groupId>
  <artifactId>vaadin-push</artifactId>
  <version>${vaadin.version}</version>
</dependency>

servlet配置:

代码语言:javascript
复制
<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class>
    <init-param>
        <param-name>ui</param-name>
        <param-value>org.vaadin.example.MyUI</param-value>
    </init-param>
    <async-supported>true</async-supported>
</servlet>

最后是@Push

代码语言:javascript
复制
@Push 
public class PushTestUI extends UI 

Reference here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17676645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档