Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 瓦丁7.1.0推力_Java_Vaadin - Fatal编程技术网

Java 瓦丁7.1.0推力

Java 瓦丁7.1.0推力,java,vaadin,Java,Vaadin,我是Vaadin的新手,只是实现了一个测试功能的原型。目前我正在使用Vaadin服务器推送功能。 我喜欢做一个简单的计数器,可以增加按钮。之后,我喜欢从不同的浏览器打开这一面,当我计算时,我喜欢更新所有的浏览器 现在我已经知道当前浏览器是由一个单独的线程更新的 public class PushTestView extends VerticalLayout implements View { private static final long serialVersionUID = -80

我是Vaadin的新手,只是实现了一个测试功能的原型。目前我正在使用Vaadin服务器推送功能。 我喜欢做一个简单的计数器,可以增加按钮。之后,我喜欢从不同的浏览器打开这一面,当我计算时,我喜欢更新所有的浏览器

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

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();
            }
         });
      }
   }
}
我将此视图嵌入到由
@Push
注释的UI中。 这是我的控制器:

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?

您必须在项目中使用servlet 3.0并编辑您的ivy.xml(或者如果您使用Maven,则使用pom.xml)。在此之后,您必须添加@Push注释以启用ui的推送。 大概是这样的:

<dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" conf="default->default" />

看看这个,第11.16.3节:

我仍然做了这个测试。到目前为止,它是有效的。但现在我喜欢将UI从一个浏览器更新到另一个浏览器。@TooR push本身只允许服务器和每个UI实例(也就是说每个浏览器)之间进行直接通信。如果你想通知其他用户界面/会话,你必须自己做,例如触发一个后台操作来更新另两个用户界面。@TooR,你需要使用一点大气框架基础设施,在用户界面上实现广播侦听器界面:@TooR《瓦丁之书》现在包含了你想要的内容,从一个用户向其他用户广播。参见第11.16章,Server Push.FYI,我在另一个问题中发布了一个在Vaadin 7.3.7中使用Push的最小示例。@BasilBourque看起来不错。谢谢你的链接。仅供参考…我发布了一个类似问题的链接,
<dependency>
  <groupId>com.vaadin</groupId>
  <artifactId>vaadin-push</artifactId>
  <version>${vaadin.version}</version>
</dependency>
<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 
public class PushTestUI extends UI