0

我用他的服务器端类和客户端(连接器类、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 类我想显式调用/访问不是单例的连接器对象,以便我也可以访问一个函数。我该如何解决?

4

1 回答 1

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
 }
 }
于 2013-10-17T07:44:45.783 回答