在GXT网格中重新加载数据冻结

时间:2012-01-16 12:19:49

标签: gwt load grid freeze gxt

基于GXT展示示例'Paging BeanModel Grid',我尝试在对数据源进行修改后重新加载网格。我像这样定义了加载器:

final BasePagingLoader<PagingLoadResult<ModelData>> loader = 
    new BasePagingLoader<PagingLoadResult<ModelData>>(proxy, new BeanModelReader());
loader.setRemoteSort(true);

正确加载数据。

当我这样做时:

loader.load();

我的分页工具栏只是冻结并被禁用,网格也冻结并显示似乎是加载掩码的内容。

我试图添加一些事件来强制双重重载但没有运气:

grid.addListener(Events.Attach, new Listener<GridEvent<ModelData>>() {
    public void handleEvent(GridEvent<ModelData> be) {
        loader.load(); 
    }
});

我尝试使用reconfigure(store,cm)选项以及相同的结果。

任何帮助?

谢谢, 霍尔迪阿。

2 个答案:

答案 0 :(得分:1)

加载栏变灰,因此您可以看到它正在工作,并且网格也可能有加载消息。正在运行的代码是服务器,可能正在准备项目。

在调用的开始和结束时,在服务器代码(可能是RPC servlet)中设置日志消息,以查看它们运行的​​时间。根据您问题中的信息,这可能是实际发生“冻结”的地方。

在此之后浏览器中可能会暂停,但在这种情况下,加载圈将停止移动。

答案 1 :(得分:0)

对我来说,网格控制器上有一个错误:

代码详情:

private final BasePagingLoader<PagingLoadResult<ModelData>> loader;
private Grid<ModelData> grid;
[...]

public ListUsersView(RpcProxy<PagingLoadResult<UserTableEntryBean>> proxy) {
        // Create loader
        loader = new BasePagingLoader<PagingLoadResult<ModelData>>(proxy, new BeanModelReader());
        loader.setRemoteSort(true);

        // Create store
        store = new ListStore<ModelData>(loader);

        FlowLayout layout = new FlowLayout();
        layout.setMargins(new Margins(3, 0, 0, 0));
        this.setLayout(layout);

        final PagingToolBar toolBar = new PagingToolBar(50);
        toolBar.bind(loader);

        List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
        columns.add(new ColumnConfig(UserTableEntryBean.Fields.username.name(), "Username", 100));
        columns.add(new ColumnConfig(UserTableEntryBean.Fields.email.name(), "E-mail", 200));
        ColumnConfig date = new ColumnConfig(UserTableEntryBean.Fields.creationDate.name(), "Creation date", 100);
        date.setDateTimeFormat(DateTimeFormat.getFormat("dd/MM/y"));
        columns.add(date);

        ColumnModel cm = new ColumnModel(columns);

        grid = new Grid<ModelData>(store, cm);

        grid.setLoadMask(true);
        grid.setBorders(true);
        grid.setAutoExpandColumn(UserTableEntryBean.Fields.creationDate.name());

        [...]
}

public boolean refreshTable() {
        return loader.load();
}