如何从窗口小部件侧显式访问连接器到Vaadin 7?

如何从窗口小部件侧显式访问连接器到Vaadin 7?,vaadin,Vaadin,我用他的服务器端类和客户端(连接器类、ServerRPC类、状态类和小部件类)创建了一个小部件 连接器: @Connect(Custom.class) public class CustomConnector extends ButtonConnector { ... public void myFunc() { // DO Something } } public class CustomWidget extends VButton { ... pri

我用他的服务器端类和客户端(连接器类、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();
  }
  ...
}
小部件:

@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类显式地调用/访问连接器对象,它不是单例对象,这样我也可以访问函数。我如何解决这个问题?

我认为您不应该直接从GWT小部件访问连接器。这与Vaadin 7体系结构相反,在该体系结构中,GWT小部件是完全独立于Vaadin的对象

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

ComponentConnector-connector=ConnectorMap.get(client.getConnector(CustomWidget.this);//客户端取自updateFromUIDL方法(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
 }
 }