首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用子编辑器实现GWT编辑器

如何用子编辑器实现GWT编辑器
EN

Stack Overflow用户
提问于 2014-01-16 15:53:32
回答 2查看 652关注 0票数 1

我正试图为一个bean对象创建一个GWT编辑器,该对象有另一个对象类型的两个字段,因此我需要这些字段的子编辑器。问题是,我对编辑器框架非常陌生,而且我并不真正了解所有这些编辑器接口的概念。请告知最好的解决方案。我的想法如下:使用子编辑器的驱动程序将数据传递给主编辑器驱动程序;或者使用某种类型的CompositeEditor (但我不知道如何处理重写的方法……)。下面是一个示例代码:

代码语言:javascript
复制
public class A {

    String s1, s2;
    Integer i;
    Double d;
    B ba, bb;

}

public class B {

    BigDecimal a, b;
}

//sub-editor
public class BEditor extends Composite implements Editor<B> {

    interface BDriver extends BeanEditorDriver<B, BEditor> {
    }

    //implements HasEditorErrors interface
    ValueBoxEditorDecorator<BigDecimal> a, b;
}

//main editor
public class AEditor extends Composite implements Editor<A> {

    interface ADriver extends BeanEditorDriver<A, AEditor> {
    }

    private ADriver driver = GWT.create(ADriver.class);

    ValueBoxEditorDecorator<String> s1, s2;
    ValueBoxEditorDecorator<Integer> i;
    ValueBoxEditorDecorator<Double> d;
    BEditor ba, bb;

    public AEditor() {
        driver.initialize(this);
        driver.edit(new A());
    }

    //called when the editor form is submitted
    public void onSubmit() {

        driver.clearErrors();
        A a = driver.flush();
        // A has both B fields = null
        // AEditor successfully displays validation errors, 
        // but BEditors do not display errors, nor does 
        // ADriver get any errors from BEditor
    }  
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-16 16:27:10

创建VehiculeDTO时,还创建B子类:

代码语言:javascript
复制
A a = new A();
a.setBa(new B());
a.setBb(new B());
driver.edit(a);
票数 1
EN

Stack Overflow用户

发布于 2015-09-16 11:02:51

以下是我使用编辑器框架的经验中的一些指南,无论是个人还是行业。我已尽最大努力使它们与你的榜样相关联。

  • 找出你的“顶级”编辑。在您的例子中,它将是AEditor -在大多数其他情况下,它将是一个视图。让指定的小部件实现Editor接口,并输入param =您的后台对象(您已经正确地这样做了)。

  • 确保支持对象A包括getter和setter,并且字段是私有的。您给他们留下了默认的访问权限,我不认为这是个好主意。

  • 确保顶级小部件包含A中每个字段的子编辑器,它们应该与A中的相应字段共享相同的名称,或者使用@Path进行注释,以指示它们与哪个字段相关。

  • 您的子编辑器不应该有自己的驱动程序接口。它们要么实现LeafValueEditor、ValueAwareEditor等,要么实现适配器接口(如IsEditor )。

  • 在顶级编辑器(此处为AEditor)的构造函数中,需要初始化驱动程序和备份对象:

代码语言:javascript
复制
ADriver driver =  GWT.create(ADriver.class);
public AEditor {
    driver.initialize(this);
    driver.edit(new A());
}

  • 保存时,应该调用driver.flush()将数据从顶层编辑器移到后台对象中。相反,在加载时,应该使用希望加载的支持对象调用driver.edit()

我提供了一些专家来演示LeafValueEditor和IsEditor,以防您需要帮助更改您的子编辑器:

LeafValueEditor

IsEditor

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21166559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档