Я успешно использовал CellTable в MVP.Ключ в том, чтобы понять назначение этой архитектуры.
MVP не означает, что представление полностью не зависит от вашей модели, в MVP вполне нормально иметь представление, которое будет работать только для ваших конкретных классов модели.Суть в том, чтобы в презентаторе было как можно больше обработки моделей и событий.Это позволяет эффективно выполнять модульный тест кода презентатора.Все, что требует среды браузера (например, виджеты), должно быть в поле зрения, где оно не будет мешать нормальному модульному тестированию (такие компоненты можно тестировать только с помощью GwtTestCase, который очень медленный).
У меня есть метод интерфейса View для создания таблицы, которая возвращается как HasData.В методе привязки презентатора я вызываю этот метод для получения таблицы, создания экземпляра поставщика данных для таблицы и манипулирования поставщиком данных в презентаторе с любыми обновленными данными.
//MyPresenter.java
HasData<MyClass> table = display.addTable();
ListDataProvider<MyClass> dataProvider = new ListDataProvider<MyClass>();
dataProvider.addDataDisplay(table);
//assumes results is a collection of MyClass to display.
//use for loop if you need to do some manipulation to get the objects in
dataProvider.getList().addAll(results);
//MyView.java
@Override // since this implements the definition from the view interface
public HasData<MyClass> addTable()
{
CellTable<MyClass> table = buildTable(); //boiler-plate table building code in this method
myPanel.add(table);
return table;
}
Это позволяет мне сохранитьлогика представления (определения столбцов и тому подобное) в представлении, к которому оно относится, и работа с моделью данных в презентере.