开发日记-GWT-EXT的Store默认不支持与GWT RPC集成

    由于GWT-EXT提供了很多EXT的Widget,如GridPanel,TabPanel等,对于我这样的毫无艺术细胞的开发者来说,使用它能节省了不少的时间。随着开发的深入,打算将一些Domain Object DTO直接放入到GridPanel中进行显示时,却发现看来看去只有那么几种Reader,XmlReader, ArrayReader, JSPReader,XmlReader和JSONReader是用于读取Xml和JSON String的Reader,最常用的就是ArrayReader,而它只支持从数组中获得数据,也就是说我必须把要放入到GridPanel中的数据放到数组当中,然后才能通过ArrayReader来放到GridPanel中,而大多数时候我都是通过GWT RPC在数据库中查询到一些Domain Object的Collection,然后想根据属性名称将需要显示在GridPanel中的字段放进去,但是由于GWT-EXT不支持直接对DomainObject的解析,所以只能把这些DomainObject先放到数组中,然后再使用ArrayReader来读取。我以为GWT-EXT的作者不会这么不小心,遗漏了这么常用的处理方式,于是就顺着GWT-EXT的JavaDoc不懈的寻找,但就是没有找到。又跑到Google上去搜索,才发现,原来果然天下没有白吃的午餐,这个居然要收费: http://groups.google.com/group/gwt-ext/browse_thread/thread/8b0eee1374d0fb55,$199一年,玩不起。
    虽然对不能免费提供这个功能很失望,但是人家Sanjiv Jivan付出那么多努力也该有点收获。只能想个变通的方法来实现这个功能,自己写一个Object到Array的转换比较麻烦,还要考虑到嵌套对象的属性,太麻烦了,决定直接使用JSON String作为RPC的返回值,也就是实现RemoteService的Service返回的时候总是返回JSONString,然后再使用JSONReader读取显示到GridPanel中。在服务器端有JSONLib直接对Java对象进行转换,这个到不麻烦。问题是解决了,但个人觉得以后还是不要使用这种个人的开源工具包还是有局限的,必须先做好考察。

下面是昨天看JavaDoc时整理出来的一些类的简单说明:

Store是客户端数据的一个集合,提供数据作为GridPanel, Combox的输入值。
Store.getAt(int index) return the Record.
ArrayReader
1. 用于从Data中读取数据的Reader,首先需要指定RecordDef,按照RecordDef对data进行读取。
2. 可指定一个Record的ID,如new ArrayReader(5, RecordDef) 及指定data数组中第五个属性作为ID;
这样可以方便的得到一条Record的ID,可以在onclick的时候将该ID传过去,然后根据ID从数据库中查到详细信息。

RecordDef是一个Record的定义,详细描述了这个Record所拥有的各个字段名称。

Record即为一个对象,类似于JavaBean,拥有自己的属性,用于进行数据存储。在客户端表现为GridPanel、Combox的一条记录。

你可能感兴趣的:(thread,json,ext,Google,gwt)