1

私の問題は私のGWTプロジェクトに関するものです。クライアントパッケージにMain.java(EntryPoint)とRegistration.java(Composite)という名前の2つのファイルがあります。登録クラスは、登録用の単なるユーザーインターフェイスです(テキストボックスとボタンがあります)

登録クラスには、登録フォームからすべての情報を取得する登録ボタンがあります。私の問題はここにあります。ユーザーがボタンをクリックしたときに、この情報をRegistrationクラスからEntryPointクラスに送信するにはどうすればよいですか?

これは私のonModuleLoadメソッドです。

...。

登録登録=新しい登録();

     dockLayoutPanel.add(registration);

...。

4

2 に答える 2

1

コマンドパターンを使用します。たとえば、インターフェイスもあります

public interface SuperPuperHandler<T> {
  public void onFire(T t);
}

そして、Registrationクラスに保存ハンドラーを追加します。

  public class Registration extends Composite{
       private SuperPuperHandler<MySavedObject> saveHandler;

       public void addSaveHandler(SuperPuperHandler<MySavedObject> saveHandler){
          this.saveHandler=saveHandler;
       }

       .....
       savebutton.addClickHandler(new ClickHandler() {
           public void onClick(ClickEvent clickEvent) {
              if(saveHandler!=null){
                  saveHandler.onFire(mysavedObject); 
              }               
          }
       });

}

だからここにあなたのEntryPointで何をすべきかがあります

 public class Main implements EntryPoint {

       ....
       Registration registration =new Registration();
       registration.addSaveHandler(new SuperPuperHandler<MySavedObject>(){
          public void onFire(MySavedObject t){
              // here is saved objects in registration form
          }
        });

}
于 2012-05-07T13:10:41.383 に答える
0

Observerパターンを使用する必要があると思います。登録コンポーネントには、「ユーザーがボタンを押した」というイベントを処理するためのリスナーを追加する何らかの方法が必要です。

手作り

最も簡単な方法は、自分で定義することです。

interface ClickListener {
  onButtonClicked(...); // use params if you want
}

登録コンポーネントは、リスナーを設定する方法を提供します。

void addClickListener(ClickListener l) {
   this.listener = l;
}

次に、ボタンをクリックすると、リスナー(インターフェイス)を呼び出すだけです。

...
if (listener != null)
   listener.onButtonClicked(...); // pass arguments if you want
...

EntryPointはリスナーを登録する必要があります。

Registration r = ...
r.addClickListener(new ClickListener() {
   public void onButtonClicked(...) {
      // do what you need
   }
}

GWTイベントの使用

この場合、イベントのクラスを定義し、特定の方法でハンドラーを登録する必要がありますが、やり過ぎになる可能性があります。それに関するドキュメントを見つけたら。この回答に追加します。

于 2012-05-07T13:05:35.350 に答える