Tomeo
unread,Nov 19, 2010, 3:35:17 AM11/19/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Google Web Toolkit
Hi folks,
I have a below a simple scenario:
1. I have a grid populated with data
2. I select any 1 row from grid - data with a specific "Object
Id" [internal id]
3. I press a refresh button from a paginationToolbar
4. data are refreshed
5. no row from grid is being selected.
Question 1:
How can I change a step 5, so after refresh a row with specific Object
Id (from step 2) would be automaticaly selected?
I tried to implement a LoadListener to loader, but it seems like I'm
incorrectly selecting a row from my grid.
Here is a bit of my code:
1. A global variable of type "Zakazka" to store a Zakazka before
refresh occures (the one which should be selected after refresh):
Code:
private Zakazka selectedZakazka;
2. Here is my grid definition with loader's load listener
Code:
RpcProxy<PagingLoadResult<Zakazka>> proxy = new
RpcProxy<PagingLoadResult<Zakazka>>() {
@Override
public void load(Object loadConfig,
AsyncCallback<PagingLoadResult<Zakazka>> callback) {
Tracing.Log("ZakazkyAktivne.RpcProxy.load.before");
service.getZakazky((PagingLoadConfig) loadConfig,
callback);
Tracing.Log("ZakazkyAktivne.RpcProxy.load.after");
}
};
// loader
final PagingLoader<PagingLoadResult<ModelData>> loader = new
BasePagingLoader<PagingLoadResult<ModelData>>(proxy);
loader.setRemoteSort(true);
ListStore<Zakazka> store = new ListStore<Zakazka>(loader);
pagingToolBar = new PagingToolBar(50);
pagingToolBar.bind(loader);
List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(new ColumnConfig("object_id", "Object Id", 80));
columns.add(new ColumnConfig("cislo_dokladu", "Číslo dokladu",
100));
ColumnConfig created = new ColumnConfig("created", "Dátum
vytvorenia", 105);
created.setDateTimeFormat(DateTimeFormat.getFormat("dd.MM.yyyy
HH:mm:ss"));
columns.add(created);
columns.add(new ColumnConfig("objednavatel", "Objednavatel",
120));
columns.add(new ColumnConfig("stredisko", "Stredisko", 150));
columns.add(new ColumnConfig("stav_zakazky_id", "Id stavu
zakazky", 60));
columns.add(new ColumnConfig("stav_zakazky_kod", "Kód stavu
zakazky", 100));
columns.add(new ColumnConfig("stav_zakazky", "Stav zakazky",
100));
columns.add(new ColumnConfig("stav_zakazky_zmenil_uziv_meno",
"Zakazku změnil", 100));
ColumnConfig updated = new ColumnConfig("stav_zakazky_zmena",
"Dátum změny", 105);
updated.setDateTimeFormat(DateTimeFormat.getFormat("dd.MM.yyyy
HH:mm:ss"));
columns.add(updated);
ColumnModel cm = new ColumnModel(columns);
gridZakazka = new Grid<Zakazka>(store, cm);
gridZakazka.setStateId("pagingGridExample");
gridZakazka.setStateful(true);
gridZakazka.addListener(Events.Attach, new
Listener<GridEvent<Zakazka>>() {
public void handleEvent(GridEvent<Zakazka> be) {
PagingLoadConfig config = new BasePagingLoadConfig();
config.setOffset(0);
config.setLimit(50);
Map<String, Object> state = gridZakazka.getState();
if (state.containsKey("offset")) {
int offset = (Integer)state.get("offset");
int limit = (Integer)state.get("limit");
config.setOffset(offset);
config.setLimit(limit);
}
if (state.containsKey("sortField")) {
config.setSortField((String)state.get("sortField"));
config.setSortDir(SortDir.valueOf((String)state.get("sortDir")));
}
loader.load(config);
}
});
gridZakazka.getSelectionModel().addListener(Events.SelectionChange,
new Listener<SelectionChangedEvent<Zakazka>>() {
public void handleEvent(SelectionChangedEvent<Zakazka>
be) {
if (be.getSelection().size() > 0) {
Tracing.Log("Grid selection changed");
formBindings.bind((ModelData)
be.getSelection().get(0));
setZakazkaDetailToolBar(be.getSelectedItem().getZakazkaObjectId(),
be.getSelectedItem().getZakazkaStavZakazkyId());
//
getLogZakazkaGrid(be.getSelectedItem().getZakazkaObjectId());
//pagingToolBarLog.refresh();
} else {
Tracing.Log("Nothing selected");
formBindings.unbind();
zakazkaDetailToolBar.removeAll();
}
}
});
loader.addLoadListener(new LoadListener() {
@Override
public void loaderLoad(LoadEvent le)
{
// Run your selection logic here
Tracing.Log("loaderLoad invoked!");
gridZakazka.getSelectionModel().select(selectedZakazka, false);
Tracing.Log("selectedZakazka selected");
}
});
gridZakazka.setLoadMask(true);
gridZakazka.setBorders(true);
3. Selected zakazka is remembered before refresh using a below code:
Code:
public void changeZakazkaStatus(Integer zakazkaId,
Integer novyStatusId) {
final DatabaseServiceAsync service = (DatabaseServiceAsync)
Registry.get(Agdoprava.SERVICE);
AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>() {
public void onFailure(Throwable caught) {
System.out.println(caught.getMessage());
}
public void onSuccess(Boolean result) {
if (result) {
Tracing.Log("Zakazka STATUS updated successfully!");
selectedZakazka =
gridZakazka.getSelectionModel().getSelectedItem();
Tracing.Log("Selected zakazka Object ID:" +
selectedZakazka.getZakazkaObjectId());
// refresh main grid
pagingToolBar.refresh();
Tracing.Log("Refresh OK");
}
else {
Tracing.Log("Zakazka STATUS update failed!");
}
}
};
// execute RPC
service.updateZakazkaStatus(zakazkaId, novyStatusId,
StaticDataController.LoggedUzivatelId, callback);
}
4. Tracing log
Code:
2010-11-19 09:06:13.739| Zakazka STATUS updated successfully!
2010-11-19 09:06:13.739| Selected zakazka Object ID:123
2010-11-19 09:06:14.066| ZakazkyAktivne.RpcProxy.load.before
2010-11-19 09:06:14.082| ZakazkyAktivne.RpcProxy.load.after
2010-11-19 09:06:14.082| Refresh OK
ZakazkaManager.getZakazky()
2010-11-19 09:06:14.436| Nothing selected
2010-11-19 09:06:14.877| loaderLoad invoked!
2010-11-19 09:06:14.877| selectedZakazka selected
From my tracing log I can see, that selectedZakazka is set correctly
and prior refresh and also that loader.LoadListener is invoked after
refresh. Just a row in grid stays unselected. So, I assume a piece of
code in loader's LoadListener [in step 2 above] is incorrect, or
uncomplete.
Could you please suggest how to correct it, so selectedZakazka will be
also selected after refresh?
Many thanks,
Tomas