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
GWT编辑器和GXT网格不发送新创建的代理实体,仅发送空值_Gwt_Gxt_Gwt Editors - Fatal编程技术网

GWT编辑器和GXT网格不发送新创建的代理实体,仅发送空值

GWT编辑器和GXT网格不发送新创建的代理实体,仅发送空值,gwt,gxt,gwt-editors,Gwt,Gxt,Gwt Editors,有人能解决为什么我会通过包含ListStoreEditor子编辑器的GXT网格将空值保存到服务器实体上的OneToMany列表中的问题吗 我遵循了Sencha示例,GridBindings示例。 这将保存GWT编辑器捕获的所有数据元素。在我的数据库中,它确实在上面的代码中为网格创建了一行,但是所有的值都是null,因此当RequestContext激发时,persist会在网格中返回一个空行。因此,没有外键将OneToMany关系中的实体关联回其父实体 此外,我还查看了对服务器的JSON请求和

有人能解决为什么我会通过包含ListStoreEditor子编辑器的GXT网格将空值保存到服务器实体上的OneToMany列表中的问题吗

我遵循了Sencha示例,GridBindings示例。

这将保存GWT编辑器捕获的所有数据元素。在我的数据库中,它确实在上面的代码中为网格创建了一行,但是所有的值都是null,因此当RequestContext激发时,persist会在网格中返回一个空行。因此,没有外键将OneToMany关系中的实体关联回其父实体

此外,我还查看了对服务器的JSON请求和响应,看起来实体中没有发送任何值。它可能是模糊的,但看起来其他值都是纯文本,所以我认为甚至没有传递代理实体值

任何帮助都会很好!谢谢

            driver.edit(entity);
            store.add(driver.flush());  
这些行表示“在编辑器中绘制新对象——好的,获取放入其中的任何值并将其添加到存储”。我不确定这是你想要的

稍后,您将引用一个
编辑器或呈现程序
,但它似乎不在您的代码中,并且不清楚何时执行刷新(甚至是初步的
编辑()
调用)并触发。您还制作了一个
编辑器
,但该类型中没有允许编辑的子编辑器

在您链接到的示例中,混合中有两个不同的驱动程序。第一种方法是将整个列表传递到ListStore中,这实际上并不需要用于示例,但可以帮助解释如何将其与更大的案例(如示例)联系起来。这个例子应该被视为两个不同的编辑器,有两个不同的驱动程序——测试时更是如此。首先确保其中一个有效,并在driver.flush()之后返回正确的值,然后是另一个

从一开始,我认为在调用
edit
之后立即调用
driver.flush()
几乎肯定不是您想要的(因为驱动程序没有任何效果),因此从这里开始会很好。然后,如果这是您想要的,请测试当您在服务器上接收到调用时,您将获得模型对象及其所有值

这些行表示“在编辑器中绘制新对象——好的,获取放入其中的任何值并将其添加到存储”。我不确定这是你想要的

稍后,您将引用一个
编辑器或呈现程序
,但它似乎不在您的代码中,并且不清楚何时执行刷新(甚至是初步的
编辑()
调用)并触发。您还制作了一个
编辑器
,但该类型中没有允许编辑的子编辑器

在您链接到的示例中,混合中有两个不同的驱动程序。第一种方法是将整个列表传递到ListStore中,这实际上并不需要用于示例,但可以帮助解释如何将其与更大的案例(如示例)联系起来。这个例子应该被视为两个不同的编辑器,有两个不同的驱动程序——测试时更是如此。首先确保其中一个有效,并在driver.flush()之后返回正确的值,然后是另一个


从一开始,我认为在调用
edit
之后立即调用
driver.flush()
几乎肯定不是您想要的(因为驱动程序没有任何效果),因此从这里开始会很好。然后,如果这是您想要的,请测试当您在服务器上收到调用时,您将获得模型对象及其所有值。

这花了我几天的时间,在科林的帮助下,在上面的评论中,谢谢

填充网格的原因是,当您在保存时刷新主编辑器时,值消失,并在网格中插入一个空行,因为您必须在编辑器上实现HasRequestContext接口以维护相同的RequestContext会话。下面是我修改后的代码

public class MyEditor implements IsWidget, Editor<FooProxy>, HasRequestContext<FooProxy> {
    interface Binder extends UiBinder<Widget, MyEditor> {}
    private static Binder uiBinder = GWT.create(Binder.class);

    private RequestContext ctx;    

    private ListStore<BarProxy> store;
    ListStoreEditor<BarProxy> items;

    @Ignore
    @UiField(provided = true)
    Grid<BarProxy> grid;

    @Ignore
    @UiField
    ChildEditor childEditor;

    @Override
    public Widget asWidget() {
        MyProperties props = GWT.create(MyProperties.class);
        this.store = new ListStore<BarProxy>(props.key());

        List<ColumnConfig<BarProxy, ?>> columns = new ArrayList<ColumnConfig<BarProxy, ?>>();
        columns.add(new ColumnConfig<BarProxy, String>(props.itemName(), 300, "MyColumn"));

        this.grid = new Grid<BarProxy>(store,new ColumnModel<BarProxy>(columns));
        items = new ListStoreEditor<BarProxy>(store);

        Widget widget = uiBinder.createAndBindUi(this);
        driver.initialize(childEditor);

        childEditor.getCreateButton().addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                RequestContext context = ctx.barRequest();
                BarProxy entity = context.create(BarProxy.class);

                entity.setName("Eugene Qtest");
                entity.setAge(45);

                ctx.edit(entity);
                store.add(entity);  
            }       
        });

        return widget;  
    }

    @Override
    public void setRequestContext(RequestContext ctx) {
        this.ctx = ctx;     
    }
}
公共类MyEditor实现IsWidget、编辑器、HasRequestContext{
接口绑定器扩展UiBinder{}
私有静态绑定器uiBinder=GWT.create(Binder.class);
私有上下文ctx;
私人列表商店;
ListStoreEditor项;
@忽略
@UiField(提供的=真)
网格;
@忽略
@尤菲尔德
儿童编辑儿童编辑;
@凌驾
公共小部件asWidget(){
MyProperties props=GWT.create(MyProperties.class);
this.store=newliststore(props.key());
列表列=新的ArrayList();
添加(新的ColumnConfig(props.itemName(),300,“MyColumn”);
this.grid=新网格(存储,新列模型(列));
items=新的ListStoreEditor(存储);
Widget Widget=uiBinder.createAndBindUi(这个);
初始化驱动程序(childEditor);
childEditor.getCreateButton().addSelectHandler(新的SelectHandler()){
@凌驾
选择公共无效(选择事件事件){
RequestContext=ctx.barRequest();
BarProxy实体=context.create(BarProxy.class);
实体名称(“Eugene Qtest”);
实体设置(45);
编辑(实体);
存储。添加(实体);
}       
});
返回控件;
}
@凌驾
公共无效setRequestContext(RequestContext ctx){
this.ctx=ctx;
}
}

在科林的帮助下,我花了好几天才弄明白,谢谢

填充网格的原因是,当您在保存时刷新主编辑器时,值消失,并在网格中插入一个空行,因为您必须在编辑器上实现HasRequestContext接口以维护相同的RequestContext
            driver.edit(entity);
            store.add(driver.flush());  
public class MyEditor implements IsWidget, Editor<FooProxy>, HasRequestContext<FooProxy> {
    interface Binder extends UiBinder<Widget, MyEditor> {}
    private static Binder uiBinder = GWT.create(Binder.class);

    private RequestContext ctx;    

    private ListStore<BarProxy> store;
    ListStoreEditor<BarProxy> items;

    @Ignore
    @UiField(provided = true)
    Grid<BarProxy> grid;

    @Ignore
    @UiField
    ChildEditor childEditor;

    @Override
    public Widget asWidget() {
        MyProperties props = GWT.create(MyProperties.class);
        this.store = new ListStore<BarProxy>(props.key());

        List<ColumnConfig<BarProxy, ?>> columns = new ArrayList<ColumnConfig<BarProxy, ?>>();
        columns.add(new ColumnConfig<BarProxy, String>(props.itemName(), 300, "MyColumn"));

        this.grid = new Grid<BarProxy>(store,new ColumnModel<BarProxy>(columns));
        items = new ListStoreEditor<BarProxy>(store);

        Widget widget = uiBinder.createAndBindUi(this);
        driver.initialize(childEditor);

        childEditor.getCreateButton().addSelectHandler(new SelectHandler() {
            @Override
            public void onSelect(SelectEvent event) {
                RequestContext context = ctx.barRequest();
                BarProxy entity = context.create(BarProxy.class);

                entity.setName("Eugene Qtest");
                entity.setAge(45);

                ctx.edit(entity);
                store.add(entity);  
            }       
        });

        return widget;  
    }

    @Override
    public void setRequestContext(RequestContext ctx) {
        this.ctx = ctx;     
    }
}