如何将信息从复合类发送到入口级?

时间:2012-05-07 12:51:27

标签: java gwt uibinder

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

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

这是我的onModuleLoad方法;

...

注册注册=新注册();

     dockLayoutPanel.add(registration);

...

2 个答案:

答案 0 :(得分: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); 
              }               
          }
       });

}

以下是您在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
          }
        });

}

答案 1 :(得分: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活动

在这种情况下,您应该为事件定义一个类,并以给定的方式注册处理程序,但它可能是过度的。如果我找到有关它的文档。我会把它添加到这个答案中。