Here is the @UiHandler method in question:
@UiHandler("table")
protected void onTableEvent(TableEvent<Publisher> event) {
int row = event.getRow();
int col = event.getColumn();
Publisher p = this.data.get(row);
switch (col) {
case 4:
this.presenter.onEdit(p);
break;
default:
this.presenter.onShow(p);
}
}
When instantiating the class containing this method, I get the
aforementioned error.
On Apr 29, 1:03 pm, jarrod <[email protected]> wrote:
> I have created my own Widget, a TableWidget. It fires a custom event,
> TableEvent. I can't seem to get UiBinder, however, to play nice with
> @UiHandler methods for TableEvents. Here is some code:
>
> public class TableWidget<T> extends ResizeComposite implements
> HasTableHandlers<T> {
>
> private List<Column<T>> columns = Collections.emptyList();
>
> private Grid grid;
>
> public TableWidget(List<Column<T>> columns) {
> this.columns = columns;
> this.grid = new Grid();
> this.grid.addClickHandler(new ClickHandler() {
>
> @Override
> public void onClick(ClickEvent event) {
> Cell cell =
> TableWidget.this.grid.getCellForEvent(event);
> int row = cell.getRowIndex() - 1;
> int col = cell.getCellIndex();
> Column<T> definition =
> TableWidget.this.columns.get(col);
> fireEvent(new TableEvent<T>(row, col, definition));
>
> }
> });
> clear();
> initWidget(this.grid);
> }
>
> @Override
> public HandlerRegistration addTableHandler(TableHandler<T>
> handler) {
> return addHandler(handler, TableEvent.TYPE);
> }
>
> public void clear() {
> this.grid.clear();
> this.grid.resizeRows(1);
>
> for (int i = 0; i < this.columns.size(); i++) {
> Column<T> col = this.columns.get(i);
> this.grid.setText(0, i, col.getHeader());
> }
> }
>
> public void setData(List<T> data) {
> this.grid.resizeRows(data.size() + 1);
> for (int row = 1; row <= data.size(); row++) {
> T datum = data.get(row - 1);
>
> for (int col = 0; col < this.columns.size(); col++) {
> Column<T> column = this.columns.get(col);
> this.grid.setText(row, col, column.render(datum));
> }
>
> }
> }
>
> }
>
> public class TableEvent<T> extends GwtEvent<TableHandler<T>> {
>
> public static Type<TableHandler<?>> TYPE;
>
> static {
> TYPE = new Type<TableHandler<?>>();
> }
>
> private int row;
>
> private int col;
>
> private Column<T> definition;
>
> public TableEvent(int row, int column, Column<T> definition) {
> this.row = row;
> this.col = column;
> this.definition = definition;
> }
>
> @SuppressWarnings("unchecked")
> @Override
> public Type<TableHandler<T>> getAssociatedType() {
> return (Type) TYPE;
> }
>
> public int getColumn() {
> return this.col;
> }
>
> public Column<T> getColumnDefinition() {
> return this.definition;
> }
>
> public int getRow() {
> return this.row;
> }
>
> @Override
> protected void dispatch(TableHandler<T> handler) {
> handler.onEvent(this);
> }
>
> }
>
> public interface TableHandler<T> extends EventHandler {
>
> void onEvent(TableEvent<T> event);
>
> }
>
> public interface HasTableHandlers<T> extends HasHandlers {
>
> HandlerRegistration addTableHandler(TableHandler<T> handler);
>
> }
>
> In my UI, I have something like this:
>
> <g:DockLayoutPanel unit="PX">
> <g:center>
> <g:ScrollPanel>
> <misc:TableWidget ui:field="table" />
> </g:ScrollPanel>
> </g:center>
> <g:south size="30">
> <g:Button ui:field="create">(+) Add</g:Button>
> </g:south>
> </g:DockLayoutPanel>
>
> Unfortunately, UiBinder blows up with the following error:
> 00:00:13.805 [ERROR] Field 'table' does not have an 'addTableHandler'
> method associated.
>
> Any ideas on why UiBinder can't see the 'addTableHandler' method that
> is obviously there?
>
> --http://groups.google.com/group/Google-Web-Toolkit-Contributors
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors