1

我的问题是关于我的 GWT 项目。我的客户端包中有 2 个名为 Main.java(EntryPoint) 和 Registration.java(Composite) 的文件。注册类只是注册的用户界面。(它有文本框和按钮)

注册类中有一个注册按钮,可以从注册表中获取所有信息。我的问题就在这里。当用户单击按钮时,如何将这些信息从 Registration 类发送到 EntryPoint 类?

这是我的 onModuleLoad 方法;

……

注册注册 = new Registration();

     dockLayoutPanel.add(registration);

……

4

2 回答 2

1

使用命令模式,例如我也有一个接口

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

并在您的注册类中添加保存处理程序:

  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); 
              }               
          }
       });

}

所以这是在您的入口点中要做的事情

 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

我认为你应该使用观察者模式。您的注册组件必须有某种方式来添加侦听器来处理“用户按下按钮”的事件。

手工制作的

最简单的方法就是自己定义:

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

并且您的 Registration 组件提供了一种设置侦听器的方法:

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 回答