如何从Widget端显式访问连接器到Vaadin 7?

时间:2013-07-24 07:01:14

标签: vaadin

我使用他的服务器端类和客户端(连接器类,ServerRPC类,状态类和窗口小部件类)创建一个窗口小部件。

连接器:

@Connect(Custom.class)
public class CustomConnector extends ButtonConnector {

   ...
   public void myFunc() {
      // DO Something
   }
}

小工具:

public class CustomWidget extends VButton {
  ...
  private CustomConnector conn = new CustomConnector();
  public CustomWidget () {
    conn.myFunc();
  }
  ...
}

现在从Widget类我想显式调用/访问不是Singleton的Connector对象,这样我也可以访问一个函数。我该如何解决?

1 个答案:

答案 0 :(得分:0)

在我看来,你不应该直接从GWT小部件访问连接器。它反对Vaadin 7架构,其中GWT小部件是完全独立于vaadin的对象。

但是,如果我们谈论从Vaadin 6到7解决方案的脏迁移可能是:

ComponentConnector connector = ConnectorMap.get(client).getConnector(CustomWidget.this); // client is taken from updateFromUIDL method (Vaadin6)

更好的解决方案是将“状态”监听器添加到窗口小部件

public interface CustomWidgetStateListener {
     public void stateChanged();
}

public class CustomWidget extends VButton {
  ...
     CustomWidgetStateListener listener;
     public void addStateListener(CustomWidgetStateListener listener) {
          this.listener = listener;
     }
     public void notifyStateChanged() { // You can call notifyStateChanged() whenever you want to notify connector
           listener.stateChanged();
     }

   ...
 }
 public class CustomConnector extends ButtonConnector {

 public CustomConnector() {
     getWidget().addStateListener(new CustomWidgetStateListener() {
           public void stateChanged() {
              myFunc();
           }
      });
   }

 ...
 public void myFunc() {
  // DO Something
 }
 }