Я пытаюсь использовать пользовательский виджет: 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 будет жаловаться на:
[ОШИБКА] com.cdg.complexityCalculator.client.view.MUpld не имеет конструктора по умолчанию (ноль аргументов).
Чтобы исправить это, вы можете определить метод @UiFactory для владельца UiBinder или аннотировать конструктор MUpld с помощью @ UiConstructor.
Мне не удалось заставить работать ни одну из этих опций, но я понял, что переключил последние две строки кода, поэтому я изменил его на то, что у меня сейчас, и обработчик загрузился с правильным объектом.
Есть идеи, как заставить это работать? Все остальное на месте, мне просто нужен способ перехватить это событие после того, как мой сервлет завершил обработку.