【发布时间】:2011-12-12 17:39:40
【问题描述】:
我正在尝试使用自定义小部件:gwtupload 和它的自定义处理程序。处理程序被定义为接口,如 Interface.OnCustomEventHandler 和方法,根据 API,我想使用的方法就像这段代码,但我不知道如何用 uiBinder 实现它。:
void onCustomEvent (Interface interface)
通常对于 uiBinder,我将此代码用于常规 gwt 小部件:
@Widget widget;
@UiHandler("widget")
void onClick(ClickEvent event){
//Handle the event processing here.
}
目前,当我尝试这个时,
@UiHandler("widget")
void onCustomEvent(ICustomInterface customInterface){
...
我得到这个空指针异常:
[错误] 生成器 'com.google.gwt.uibinder.rebind.UiBinderGenerator' 在重新绑定 '...ViewImpl.ViewImplUiBinder' 时引发异常 java.lang.NullPointerException
这是我尝试的新代码:
public class MUpld extends Composite {
private static MUpldUiBinder uiBinder = GWT.create(MUpldUiBinder.class);
interface MUpldUiBinder extends UiBinder<Widget, MUpld> {
}
@UiField MultiUploader uploader;
public MUpld() {
final IUploader.OnFinishUploaderHandler onFinishUploaderHandler = new IUploader.OnFinishUploaderHandler() {
@Override
public void onFinish(IUploader iUploader) {
if (uploader.getStatus() == Status.SUCCESS){
System.out.println("In the onFinish method!");
}
}
};
initWidget(uiBinder.createAndBindUi(this));
uploader.addOnFinishUploadHandler(onFinishUploaderHandler);
}
}
在调试器中,我看到处理程序附加到我定义的上传器小部件,但是一旦代码移出此类,当前上传器就变成了不同的上传器。我尝试使用 final 修饰符,因为这是我知道将变量放入内部类的唯一方法,但 gwt 会抱怨:
[ERROR] com.cdg.complexityCalculator.client.view.MUpld 没有默认(零参数)构造函数。
要解决此问题,您可以在 UiBinder 的所有者上定义 @UiFactory 方法,或者使用 @UiConstructor 注释 MUpld 的构造函数。
我无法让这些选项中的任何一个起作用,但我意识到我已经切换了最后两行代码,所以我将其更改为我现在所拥有的,并且处理程序加载了正确的对象。
关于如何让它发挥作用的任何想法?其他一切都准备就绪,我只需要在我的 servlet 完成处理后捕获此事件。
【问题讨论】: