我的问题是关于我的GWT项目。 我在我的客户端软件包中有两个名为Main.java(EntryPoint)和Registration.java(Composite)的文件。注册类只是用于注册的用户界面。(它有文本框和按钮)
注册课程中有一个注册按钮,它从注册表中获取所有信息。我的问题在这里。当用户单击按钮时,如何将此信息从Registration类发送到EntryPoint类?
这是我的onModuleLoad方法;
...
注册注册=新注册();
dockLayoutPanel.add(registration);
...
答案 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活动
在这种情况下,您应该为事件定义一个类,并以给定的方式注册处理程序,但它可能是过度的。如果我找到有关它的文档。我会把它添加到这个答案中。