background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwowy dostęp do danych 

Zaawansowane wykorzystanie biblioteki 

EXT GWT w aplikacjach opartych o Google 

Web Toolkit 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Treść modułu 

1. Warstwy dostępowe 
2. Format modelu 
3. Proxy 
4. DataReader 
5. Loader 
6. Store 

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwy dostępowe 

• Kontrolki takie jak ComboBoxListViewGrid, czy Tree wymagają dostępu 

do danych. 

• Dane te mogą:  

o

pochodzid z różnych źródeł, 

o

byd przechowywane w pamięci podręcznej 

o

grupowane,  

o

Dzielone na strony 

• GXT udostępnia szereg klas pozwalające na transparentny i warstwowy 

dostęp do danych 
 

• Wyróżnia się następujące warstwy: 

o

warstwa danych 

o

Proxy z opcjonalną DataReader 

o

Loader 

o

Store 

o

warstwa kontrolki (widgetu) 

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwy model dostępu do danych 

Zaawansowane wykorzystanie biblioteki EXT GWT 

Widgety typu Tree 

Widgety typu List 

Warstwa Store 

Warstwa Proxy 

ComboBox 

  

ListView 

  

Grid 

  

TreePanel 

  

TreeGrid 

  

ListStore 

  

GroupingStore 

  

TreeStore 

  

Warstwa Loader 

BaseListLoader 

  

BasePagingListLoader 

  

BaseTreeLoader 

  

BaseRemoteSortTreeLoader 

  

MemoryProxy 

  

  

PagingModelMemoryProxy 

  

RpcProxy 

  

HttpProxy 

  

ScriptTagProxy 

  

DataReader 

  

  

  

  

  

  

Dane 

ModelData 

nie ModelData 

  

background image

copyright BNS MEDIA 

www.devcastzone.com 

Format modelu danych 

• Aby obiekty reprezentujące wiersze danych mogły 

byd zaczytane przez kontrolki GXT, muszą 
implementowad interfejs ModelData  

• Dopuszczane są również i inne typy, ale wymaga to 

zaimplementowania dodatkowego konwertera -
DataReader . 
 

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwa Proxy 

• Warstwa Proxy definiuje interfejs dla obiektów, które 

mogą pobrad dane 

• Ujednolica metody oraz źródła pobieranych danych  
• Rodzina klasy: DataProxy 

(

com.extjs.gxt.ui.client.data.DataProxy

•  Najpopularniejsze implementacje: 

o

MemoryProxy 
(

com.extjs.gxt.ui.client.data.MemoryProxy

) –

pozwala na przekazanie załadowanych danych do 
wyświetlenia przez konstruktor, 

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwa Proxy 

• PagingModelMemoryProxy (

com.extjs.gxt.ui. 

client.data.PagingModelMemoryProxy

) – pozwala na 

wczytanie

 załadowanych danych z uwzględnieniem paginacji, 

• RpcProxy (

com.extjs.gxt.ui.client.data.RpcProxy

) – 

implementacja pozwalająca na wczytanie danych poprzez 
funkcję zwrotną również i GWT-RPC, 

• HttpProxy (

com.extjs.gxt.ui.client.data.HttpProxy

– implementacja pozwalająca na pobieranie danych 
wykorzystując RequestBuildera

• ScriptTagProxy (

com.extjs.gxt.ui.client.data. 

ScriptTagProxy

) – proxy pozwalające na odczyt danych 

znajdujących się w innej domenie (cross-site requests),  

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwa Proxy 

• DataReader pozwala na konwersję surowych danych 

do klas modelu ModelData i na odwrót 

• Stosuje się jedynie w przypadku gdy do części 

klienckiej zostały zaczytane obiekty niebędące 
instancją klasy ModelData 

• Rodzina klasy: DataReader 

(

com.extjs.gxt.ui.client.data.DataReader

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

DataReader - implementacje 

• Najpopularniejsze implementacje: 

o

BeanModelReader (

com.extjs.gxt.ui.client.data.BeanModelReader

)  

konwertuje automatycznie obiekty  

• oznaczone adnotacją BeanModelMarker 
• implementujących BeanModelTag 

o

JsonLoadResultReader 

(

com.extjs.gxt.ui.client.data.JsonLoadResultReader

o

JsonPagingLoadResultReader 

(

com.extjs.gxt.ui.client.data.JsonPagingLoadResultReader

)  

o

XmlLoadResultReader 

(

com.extjs.gxt.ui.client.data.XmlLoadResultReader

)  

o

XmlPagingLoadResultReader 

(

com.extjs.gxt.ui.client.data.XmlPagingLoadResultReader

)  

o

TreeBeanModelReader 

(

com.extjs.gxt.ui.client.data.TreeBeanModelReader

)  

o

TreeModelReader (

com.extjs.gxt.ui.client.data.TreeModelReader

Zaawansowane wykorzystanie biblioteki EXT GWT 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader 

• Loader pozwala na wczytanie określnego zakresu 

danych uwzględniając: 

o

Dzielenie na strony - paginację 

o

Sortowanie 

o

Filtry 

• Rodzina klasy: Loader 

(

com.extjs.gxt.ui.client.data.Loader

Zaawansowane wykorzystanie biblioteki EXT GWT 

10 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader 

• Najpopularniejsze implementacje: 

o

BaseListLoader (

com.extjs.gxt.ui.client.data.BaseListLoader

) – 

domyślna implementacja pozwalająca na ładowanie listy 
danych w całości, 

o

BasePagingLoader (

com.extjs.gxt.ui.client.data.BasePagingLoader

) –

pozwala na wczytywanie zakresu danych od określonej 
pozycji o określonej ilości elementów 

o

BaseTreeLoader (

com.extjs.gxt.ui.client.data.BaseTreeLoader

)  

o

BaseRemoteSortTreeLoader 
(

com.extjs.gxt.ui.client.data.BaseRemoteSortTreeLoader

Zaawansowane wykorzystanie biblioteki EXT GWT 

11 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader – dzielenie na strony 

• Loader odpowiedzialny jest za dzielenie na strony - 

paginację 

• Paginacja pozwala na wczytanie określonego zakresu 

danych: 

o

Od jakiego miejsca - offset 

o

Ile wierszy – limit 

• Kontrolki automatycznie obsługują paginację o ile 

zwrócony jest odpowiedni wynik - LoadResult 

• Aby zwracane dane zostały wyświetlone bezpośrednio w 

widgecie, proxy do którego się odnosi loader powinno 

przyjmowad jako parametr LoadConfig a zwracad 

ListLoadResult. Jeżeli tak się nie dzieje musi zostad 

dołączony odpowiedni DataReader, 

Zaawansowane wykorzystanie biblioteki EXT GWT 

12 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader 

• LoadConfig (

com.extjs.gxt.ui.client.data. 

LoadConfig

) jest to interfejs modelu danych, który 

służy do przekazywania parametrów przez kontrolki 

Zaawansowane wykorzystanie biblioteki EXT GWT 

13 

• String sortField 
• String sortDir 

BaseListLoadConfig 

• Modeldata parent 

BaseRemoteSortTreeLoadConfig 

• String groupBy 

BasedGroupingLoadConfig 

• int limit 
• int offset 

BasePagingLoadConfig 

• List<filterConfig> 

filters 

BaseFilterPagingLoadConfig 

• Określa parametry,      

które definiują w jaki 
sposób dane mają zostad 
pobrane przez system 
dostępu do danych (DAO) 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader - paginacja 

• ListLoadResult (

com.extjs.gxt.ui.client. 

data.ListLoadResult

) stanowi interfejs modelu 

danych, który jest wczytywany przez kontrolki. 

Zaawansowane wykorzystanie biblioteki EXT GWT 

14 

• Zawiera: 

o

listę obiektów do 
wyświetlenia 

o

informacje o zastosowanych 
ograniczeniach na zwróconym 
zbiorze danych 

•List<ModelData> listData 

ListLoadResult 

•int offset 
•int totalLength 

BasePagingLoadResult 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Loader - paginacja 

Zaawansowane wykorzystanie biblioteki EXT GWT 

15 

WIDGET 

Serwer 

Baza 

Danych 

LoadConfig 

LoadResult 

offset, limit, sortField, 

sortDir, groupBy, 

fieldFilters 

List<ModelData> 

offset, limit 

Parametry 

do 

załadowania 

Parametry 

zastosowane 

do zestawu 

zwracanych 

danych 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwa Store 

• Store pozwala na przechowywanie odczytanych 

obiektów w pamięci podręcznej (cache) klienta  

• Dane te mogą byd przechowywane w sposób: 

o

płaski (dla ComboBoxList i Grid)  

o

zgrupowany (GridTree).  

• Rodzina klas Store (

com.extjs.gxt.ui.client. 

store.Store

Zaawansowane wykorzystanie biblioteki EXT GWT 

16 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Store 

• Najpopularniejsze implementacje: 

o

ListStore (

com.extjs.gxt.ui.client.store. 

ListStore

) – podstawowa implementacja pamięci 

podręcznej 

o

GroupingStore (

com.extjs.gxt.ui.client.store. 

GroupingStore

) – klasa pozwalająca pogrupowad wybrane 

obiekty po jednym wybranym polu klasy modelu 

o

TreeStore (

com.extjs.gxt.ui.client.store. 

TreeStore

) – pamięd podręczna dla hierarchicznych 

danych. Relacja rodzic-dziecko obsługiwana jest wewnątrz 
implementacji Store 

Zaawansowane wykorzystanie biblioteki EXT GWT 

17 

background image

copyright BNS MEDIA 

www.devcastzone.com 

Warstwowy dostęp do danych - przykład  

Zaawansowane wykorzystanie biblioteki EXT GWT 

18 

  

final

 FeedModelRpcAsync service = GWT.create(FeedModelRpc.

class

); 

  RpcProxy<BaseListLoadResult<FeedModel>> proxy = 

new

 

RpcProxy<BaseListLoadResult<FeedModel>>() { 
  
    @Override 
    

protected

 

void

 load(Object loadConfig, 

final

 

AsyncCallback<BaseListLoadResult<FeedModel>> callback) { 
      service.getAllFeeds(

new

 AsyncCallback<ArrayList<FeedModel>>() { 

  
        @Override 
        

public

 

void

 onFailure(Throwable caught) { 

          callback.onFailure(caught); 
        } 
  
        @Override 
        

public

 

void

 onSuccess(ArrayList<FeedModel> result) { 

          callback.onSuccess(

new

 BaseListLoadResult<FeedModel>(result)); 

        } 
      }); 
    } 
  }; 
  BaseListLoader<BaseListLoadResult<FeedModel>> loader = 

new

 

BaseListLoader<BaseListLoadResult<FeedModel>>(proxy); 
  ListStore<FeedModel> store = 

new

 ListStore<FeedModel>(loader);