天天看點

開發日記-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上去搜尋,才發現,原來果然天下沒有白吃的午餐,這個居然要收費:[url]http://groups.google.com/group/gwt-ext/browse_thread/thread/8b0eee1374d0fb55[/url],$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的一條記錄。