cri1258
18 Aug 2009, 4:33 PM
When using BeanModel and Java Beans, TreeGrid fails to load. A zip file with a zipped eclipse project is attached. To make the zip file small, I stripped out the following:
gxt.jar from lib/
gxt-all.css and gxt-gray.css from war/gxt/css/
all gxt images files from war/gxt/images/
gwt-servlet.jar from war/WEB-INF/lib
If you restore these and import the project into eclipse with gwt plugin installed, you can run the project to observe what to me seems like faulty behavior.
versions:
gwt 1.7, gxt 2.0.1, eclipse galileo
for reference, my EntryPoint class is:
package com.centurylink.testgwtgxt.client;
import java.util.Arrays;
import java.util.List;
import com.centurylink.testgwtgxt.client.domain.Person;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BaseTreeLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.data.TreeLoader;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.StoreSorter;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGridCellRenderer;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
public class TestGwtGxt implements EntryPoint {
private final PersonServiceAsync personService = GWT.create(PersonService.class);
public void onModuleLoad() {
Viewport viewport = new Viewport();
viewport.setLayout(new RowLayout());
AsyncTreeGridExample gridExample = new AsyncTreeGridExample();
viewport.add(gridExample);
RootPanel.get().add(viewport);
}
class AsyncTreeGridExample extends LayoutContainer {
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setLayout(new FlowLayout(10));
RpcProxy<List<Person>> proxy = new RpcProxy<List<Person>>() {
@Override
protected void load(Object loadConfig,
AsyncCallback<List<Person>> callback) {
personService.getChildren((Person) loadConfig, callback);
}
};
BeanModelReader reader = new BeanModelReader();
// tree loader
final TreeLoader<BeanModel> loader = new BaseTreeLoader<BeanModel>(proxy,reader) {
@Override
public boolean hasChildren(BeanModel parent) {
return true;
}
};
// trees store
final TreeStore<BeanModel> store = new TreeStore<BeanModel>(loader);
store.setStoreSorter(new StoreSorter<BeanModel>() {
@Override
public int compare(Store<BeanModel> store, BeanModel m1,
BeanModel m2, String property) {
return 1;
}
});
loader.load(null);
ColumnConfig name = new ColumnConfig("name", "Name", 100);
TreeGridCellRenderer<BeanModel> renderer = new TreeGridCellRenderer<BeanModel>() {
@Override
public Object render(BeanModel model, String property,
ColumnData config, int rowIndex, int colIndex,
ListStore<BeanModel> store, Grid<BeanModel> grid) {
return super.render(model, property, config, rowIndex, colIndex, store, grid);
}
};
name.setRenderer(renderer);
ColumnModel cm = new ColumnModel(Arrays.asList(name));
ContentPanel cp = new ContentPanel();
cp.setBodyBorder(false);
cp.setHeading("Async TreeGrid");
cp.setButtonAlign(HorizontalAlignment.CENTER);
cp.setLayout(new FitLayout());
cp.setFrame(true);
cp.setSize(600, 300);
TreeGrid<BeanModel> tree = new TreeGrid<BeanModel>(store, cm);
tree.setBorders(true);
tree.getStyle().setLeafIcon(IconHelper.createStyle("icon-page"));
tree.setSize(400, 400);
tree.setAutoExpandColumn("name");
tree.setTrackMouseOver(false);
cp.add(tree);
add(cp);
}
}
}
gxt.jar from lib/
gxt-all.css and gxt-gray.css from war/gxt/css/
all gxt images files from war/gxt/images/
gwt-servlet.jar from war/WEB-INF/lib
If you restore these and import the project into eclipse with gwt plugin installed, you can run the project to observe what to me seems like faulty behavior.
versions:
gwt 1.7, gxt 2.0.1, eclipse galileo
for reference, my EntryPoint class is:
package com.centurylink.testgwtgxt.client;
import java.util.Arrays;
import java.util.List;
import com.centurylink.testgwtgxt.client.domain.Person;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BaseTreeLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.data.TreeLoader;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.store.StoreSorter;
import com.extjs.gxt.ui.client.store.TreeStore;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Viewport;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGrid;
import com.extjs.gxt.ui.client.widget.treegrid.TreeGridCellRenderer;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.RootPanel;
public class TestGwtGxt implements EntryPoint {
private final PersonServiceAsync personService = GWT.create(PersonService.class);
public void onModuleLoad() {
Viewport viewport = new Viewport();
viewport.setLayout(new RowLayout());
AsyncTreeGridExample gridExample = new AsyncTreeGridExample();
viewport.add(gridExample);
RootPanel.get().add(viewport);
}
class AsyncTreeGridExample extends LayoutContainer {
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
setLayout(new FlowLayout(10));
RpcProxy<List<Person>> proxy = new RpcProxy<List<Person>>() {
@Override
protected void load(Object loadConfig,
AsyncCallback<List<Person>> callback) {
personService.getChildren((Person) loadConfig, callback);
}
};
BeanModelReader reader = new BeanModelReader();
// tree loader
final TreeLoader<BeanModel> loader = new BaseTreeLoader<BeanModel>(proxy,reader) {
@Override
public boolean hasChildren(BeanModel parent) {
return true;
}
};
// trees store
final TreeStore<BeanModel> store = new TreeStore<BeanModel>(loader);
store.setStoreSorter(new StoreSorter<BeanModel>() {
@Override
public int compare(Store<BeanModel> store, BeanModel m1,
BeanModel m2, String property) {
return 1;
}
});
loader.load(null);
ColumnConfig name = new ColumnConfig("name", "Name", 100);
TreeGridCellRenderer<BeanModel> renderer = new TreeGridCellRenderer<BeanModel>() {
@Override
public Object render(BeanModel model, String property,
ColumnData config, int rowIndex, int colIndex,
ListStore<BeanModel> store, Grid<BeanModel> grid) {
return super.render(model, property, config, rowIndex, colIndex, store, grid);
}
};
name.setRenderer(renderer);
ColumnModel cm = new ColumnModel(Arrays.asList(name));
ContentPanel cp = new ContentPanel();
cp.setBodyBorder(false);
cp.setHeading("Async TreeGrid");
cp.setButtonAlign(HorizontalAlignment.CENTER);
cp.setLayout(new FitLayout());
cp.setFrame(true);
cp.setSize(600, 300);
TreeGrid<BeanModel> tree = new TreeGrid<BeanModel>(store, cm);
tree.setBorders(true);
tree.getStyle().setLeafIcon(IconHelper.createStyle("icon-page"));
tree.setSize(400, 400);
tree.setAutoExpandColumn("name");
tree.setTrackMouseOver(false);
cp.add(tree);
add(cp);
}
}
}