我正在构建我的第一个GWT应用程序,以MVP模式设计。 现在我有一个视图应该填充一个有很多字段的DTO(aprox .20)。 我想让它在这里清理干净将所有这些小部件/值传递给我的dto的最干净/最痛苦的方法是什么?
为每个DTO字段创建一个小部件并通过onClickHandler传递值? 这将是很多锅炉代码,必须有另一种方式。 有一个FormPanel,但在阅读GWT邮件列表时,它应该只用于文件上传。
只是为了完整性:我正在为我的项目使用GWTP,这简化了基本的MVP内容。
如果您正在寻找数据绑定解决方案,那么您应该查看GWT的ui编辑器 。
来自GWT文件:
GWT编辑器框架允许将存储在对象图中的数据映射到编辑器图上。 典型的场景是将从RPC机制返回的对象连接到UI。
编辑器框架使用延迟绑定和命名约定的组合来减少锅炉板代码。 系统是高度可定制的,因此如果由于某种原因您无法遵循命名约定,则可以使用注释指定bean属性的编辑器。
我几乎把所有的小部件都用在UiBinder上 。 它鼓励正确分离表示和逻辑,并有助于跟踪您的小部件。
对于要显示/编辑的每个属性,View界面应至少包含一个方法。 因此,例如,如果您的DTO具有属性“name”,则View界面应包含此属性的方法。
interface ExampleView extends View {
// for a textbox
HasValue<String> getName();
// for a label
HasText getName();
// maybe a save button, for updating the dto and further actions
HasClickHandlers getSaveButton();
}
现在,您的演示者可以将数据从DTO设置到您的视图,或者在文本框的情况下,您可以从小部件中读取更改的值。
可以使用绑定到HasValue接口的ValueChangeHandler来实现从小部件更新DTO,或者您的ViewImpl可以有一个Button,通知您的演示者更新DTO。
此解决方案导致更多代码(样板),但将模型与视图分开。
这里是各种接口HasValue , HasText和HasClickHandlers的API文档。
考虑实现解决方案的不同方法,然后询问以下内容。
最好的解决方案是您最容易阅读,更改和测试的解决方案。