Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将行添加到GXT网格_Java_Gwt_Grid_Gxt - Fatal编程技术网

Java 如何将行添加到GXT网格

Java 如何将行添加到GXT网格,java,gwt,grid,gxt,Java,Gwt,Grid,Gxt,我正在尝试使用GXT框架创建一个相当简单的GWT应用程序,并基于电子书《Ext GWT 2.0初学者指南》进行此操作。它详细介绍了使用GXTs MVC模型构建应用程序的所有步骤,其中大部分都按预期工作,但我无法在整个过程中向网格中添加新行 网格数据的初始加载(通过itemStore、loader和RPCProxy工作正常) 但是,每次触发触发添加新行的事件时,我要添加到的ListStore都是空的(不是null!而是空的)-即使我的网格在初始加载后显示数据 以下是一些相关代码: public c

我正在尝试使用GXT框架创建一个相当简单的GWT应用程序,并基于电子书《Ext GWT 2.0初学者指南》进行此操作。它详细介绍了使用GXTs MVC模型构建应用程序的所有步骤,其中大部分都按预期工作,但我无法在整个过程中向网格中添加新行

网格数据的初始加载(通过itemStore、loader和RPCProxy工作正常)

但是,每次触发触发添加新行的事件时,我要添加到的ListStore都是空的(不是null!而是空的)-即使我的网格在初始加载后显示数据

以下是一些相关代码:

public class MessageGrid extends LayoutContainer {
    private final Grid<ModelData> grid;
    private final ListLoader<ListLoadResult<MarketingMessage>> loader;
    private final ListStore<ModelData> itemStore;
    public MessageGrid() {
        setLayout(new FitLayout());
        final MarketingServiceAsync marketingService = Registry.get(MarketingUIConstants.MARKETING_SERVICE);
        RpcProxy<List<MarketingMessage>> proxy = new RpcProxy<List<MarketingMessage>>() {
            @Override
            protected void load(Object loadConfig, final AsyncCallback<List<MarketingMessage>> callback) {
                marketingService.getMessages(callback);
            }
        };
        final List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
        columns.add(new ColumnConfig("col1", "Name", 100));
        columns.add(new ColumnConfig("col2", "Phone", 100));
        final ColumnModel columnModel = new ColumnModel(columns);       
        loader = new BaseListLoader<ListLoadResult<MarketingMessage>>(proxy);
        itemStore = new ListStore<ModelData>(loader);
        grid = new Grid<ModelData>(itemStore, columnModel);
        grid.setBorders(true);
        grid.setAutoExpandColumn("sentTime");
        grid.setAutoHeight(false);
        grid.setHeight("100%");     
    }

    @Override
    protected void onRender(Element parent, int index) {
        super.onRender(parent, index);
        loader.load();
        add(grid);
    }

    public void addMessage(MarketingMessage marketingMessage) {
        itemStore.add(new MarketingMessage("test", "test")));
    }
}
公共类MessageGrid扩展了LayoutContainer{
私有最终网格;
私有最终列表加载器;
私有最终列表库itemStore;
公共消息网格(){
setLayout(新的FitLayout());
最终MarketingServiceAsync marketingService=Registry.get(MarketingUIConstants.MARKETING\u服务);
RpcProxy代理=新的RpcProxy(){
@凌驾
受保护的无效加载(对象加载配置,最终异步回调){
marketingService.getMessages(回调);
}
};
最终列表列=新的ArrayList();
添加(新的ColumnConfig(“col1”,“Name”,100));
添加(新的ColumnConfig(“col2”,“Phone”,100));
最终ColumnModel ColumnModel=新ColumnModel(列);
加载器=新的BaseListLoader(代理);
itemStore=新列表存储(加载器);
网格=新网格(itemStore、columnModel);
网格。命令(真);
grid.setAutoExpandColumn(“sentTime”);
grid.setAutoHeight(假);
网格设置高度(“100%”);
}
@凌驾
受保护的void onRender(元素父元素,int索引){
super.onRender(父级,索引);
loader.load();
添加(网格);
}
公共无效添加消息(MarketingMessage MarketingMessage){
添加(新的MarketingMessage(“test”,“test”));
}
}
所属组件(已添加此LayoutContainer的视图)正在调用addMessage()

如果在addMessage()方法中设置断点,则itemStore的大小为0(grid.getStore()也是如此)

我尝试过对代码进行各种不同的更改,但还没有看到添加了一行


类似的注意事项是:如果在addMessage()方法中,我尝试从代理重新加载-因为我也更新了服务器端数据-即loader.load(),它也没有任何可见的效果

加载程序将是异步的-它需要等待服务器(MarketingService)返回值。您确定这将返回一个非空列表吗?通过将代理中的回调替换为自己的回调来验证这一点,该回调检查返回给客户端的内容(如果服务器抛出异常,甚至可能根本不会调用该回调)

如果addMessage在onRender或之后不久调用,则可能太早,服务器可能尚未返回数据,因此存储区可能仍然为空。如果通过单击按钮或其他方式调用,这将不是问题


检查日志中是否存在异常,您正在将处理项目列表的代理传递给需要ListLoadResult的加载程序-这也可能是错误源。GXT 2中令人困惑的泛型应该主要在3中解决,3目前处于测试阶段。

加载程序将是异步的-它需要等待服务器(MarketingService)返回值。您确定这将返回一个非空列表吗?通过将代理中的回调替换为自己的回调来验证这一点,该回调检查返回给客户端的内容(如果服务器抛出异常,甚至可能根本不会调用该回调)

如果addMessage在onRender或之后不久调用,则可能太早,服务器可能尚未返回数据,因此存储区可能仍然为空。如果通过单击按钮或其他方式调用,这将不是问题


检查日志中是否存在异常,您正在将处理项目列表的代理传递给需要ListLoadResult的加载程序-这也可能是错误源。GXT 2中令人困惑的泛型应该主要在3中解决,3目前处于测试阶段。

加载程序正在运行并填充网格。直到应用程序加载完毕,网格显示来自MarketingService的现有记录,我才单击(测试)按钮,这反过来会触发对addMessage()的调用。所以我无法想象这与你刚才提到的有关。好吧,很难从提供的信息中分辨出来。如果网格中有可见的项,那么存储仍然有项(即使addMessage调用没有看到任何项),这表明可能使用了错误的存储,甚至可能是错误的MessageGrid实例。简单的验证方法-进入addMessage,确保this.grid.attached为true。如果是的话,那么不知何故你要么交易了网格、商店,要么找到了一种方法来清除网格而不绘制更改。我只是检查了一下。。。grid.attached在单步执行addMessage()方法时显示为false。感谢您的反馈Colin,您关于“您已经交易了网格”的评论让我思考,然后我意识到当我在构造函数中设置断点时,它会被击中两次!:-)因此,这与围绕它的总体MVC模型初始化所有部分的方式有关,它以某种方式创建了2个网格。加载程序正在运行并填充网格。直到应用程序加载完毕,网格显示来自MarketingService的现有记录,我才单击(测试)按钮,这反过来会触发对addMessage()的调用。所以我无法想象这与你刚才提到的有关。好吧,很难从提供的信息中分辨出来。如果网格中有可见的项,那么存储仍然有项(即使addMessage调用