Issue filed. Thanks! http://code.google.com/p/google-web-toolkit/issues/detail?id=4899
On Apr 29, 3:54 pm, Ray Ryan <[email protected]> wrote: > That's supposed to work. Jarrod, can you get this into the issue tracker? > > > > > > On Thu, Apr 29, 2010 at 10:04 AM, jarrod <[email protected]> wrote: > > 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 > > --http://groups.google.com/group/Google-Web-Toolkit-Contributors -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
