【问题标题】:UiBinder wrongly thinks I have no addValueChangeHandler methodUiBinder 错误地认为我没有 addValueChangeHandler 方法
【发布时间】:2013-09-08 00:55:23
【问题描述】:

我有一个类 Selector,它扩展 ListBox 并实现 HasValue(因此 HasValueChangeHandlers)然后我有:

@Override
public HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler) {
  return addHandler(handler, ValueChangeEvent.getType());
}

我有一个 Selector 的子类 MessageListBox,它为某些特殊对象的 Selector 添加了一些额外的功能。然后我在我的一个小部件中......

@UiField MessageListBox<Column> filterColumnSelect;
...
@UiHandler("filterColumnSelect")
void handleSelectColumn(ChangeEvent event) {
  ((Button) add).setEnabled(filterColumnSelect.hasSelection());
}

这行得通,但我想更改方法以实际侦听 ValueChangeEvent,因为在代码中有些地方我生成了一个(虽然我已经找到了如何创建原始 ChangeEvents,但我宁愿不要在这里这样做)。 所以,那我把代码改成……

@UiField MessageListBox<Column> filterColumnSelect;
...
@UiHandler("filterColumnSelect")
void handleSelectColumn(ValueChangeEvent<Column> event) {
  ((Button) add).setEnabled(filterColumnSelect.hasSelection());
}

但现在 GWT 无法编译: [错误] 字段 'filterColumnSelect' 没有关联的 'addValueChangeHandler' 方法。

嗯...是的,它是从 Selector 继承的,并且所有这些类都是公共的。什么给了?

另外,作为说明,我也查看了 ValueListBox,但我需要它不支持的一些功能,所以没有了。

【问题讨论】:

  • 我还在工作中自己替换了ValueListBox,所以我现在没有代码。但是你能做到filterColumnSelect.addValueChangeHandler()吗?如果可行,您的 @UiHandler 也应该可以使用。
  • 是的,我可以手动添加处理程序,但@UiHandler 无论如何都拒绝工作。
  • 预感我认为这可能是 UiBinder 在编译时使用的任何过程(源代码分析或反射,我不知道内部工作原理)可能只是不喜欢超类方法。所以我尝试在只委托给超类的子类上添加一个覆盖方法。现在它起作用了。所以,至少我知道问题出在哪里......奇怪的是,ChangeHandler 在超类上没有问题......:-/
  • 很高兴你知道了。我想我从来没有遇到过这个问题。我会记住的

标签: java gwt uibinder


【解决方案1】:

这是a known bug。它已经修复,将在 GWT 2.6 中发布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2018-11-05
    • 1970-01-01
    • 2018-04-05
    • 2023-03-29
    相关资源
    最近更新 更多