如何在编辑时更改GWT编辑器

时间:2014-06-12 13:25:17

标签: gwt gwt-editors

enter image description here我有一个GWT表单,根据其中选择的内容更改某些字段。表单使用Editor,Driver GWT模块

故事是一个编辑她的个人资料的人,并说:“我是用户”或“我是卖家”(最终“我是其他人”) 因此,根据这种自我形式的选择,我想在视图中更改一些编辑器(一个人的名字,姓氏成为公司名称,税号序列号,而许多其他字段保持不变但改变他们的位置)。我制作了两套UiBinder屏幕(每个配置文件一个)。我有一个主要的UiBinder包含复选框“我是一家公司”处理那些子编辑

我认为直到现在才能做到的是我有一个带有子编辑器的ValueAwareEditor

@Path("")
@UiField
protected CompanyBasicInfo basicInfoComp;

@Path("")
@UiField
protected PersonBasicInfo basicInfoPers;

两者都由驱动程序填充,但只有其中一个可见。

问题在于我不喜欢在许多编辑器中拥有相同属性的想法,这种方法的性能都不可能暗示

另一方面,CompanyBasicInfo和PersonBasicInfo是常规的编辑器实现。所以将@Ignore放在它们两个上是不可能的,因为我不能在我想要的时候调用它们的setValue()。

同样让它们实现ValueAwareEditor对我来说并不清楚,因为包含常规的Editor小部件,所以我仍然无法在它们的字段上调用setValue():我只是将问题向前推进了一步......

在视图中,我也无法再次访问驱动程序来调用edit()。我看了一下如何在列表中完成,但是有太多新概念,我认为我不必学习所有代码只是为了能够处理这个简单的案例

谢谢你的回答

1 个答案:

答案 0 :(得分:1)

由于编辑器框架将与您在编辑器中提供的同一对象一起工作,因此您可以在编辑过程中保存添加缺少的部分。

我想,我会尝试使用OptionalFieldEditor或使用ValueAwareEditor和Subeditors的组合来解决它。

主要结构可能类似

public class Person implements Serializable 
{
    private CompanyBasicInfo companyInfo;  // nullable
    private PersonBasicInfo personInfo;    // nullable
    private String fooBar;

    [ ... add getters and setters ... ]
}

编辑器将至少实现ValueAware

public class PersonEditor implements ValueAwareEditor<Person>
{
    @UiField
    CompanyBasicInfoEditor companyInfo;
    @UiField
    PersonBasicInfoEditor personInfo;
    @UiField
    TextBox fooBar;

    // You may not want to use this, but rather have some other handlers.
    @UiField
    Button btnAddPerson;
    @UiField
    Button btnAddCompany;

    @Path("")
    SimpleEditor<Person> myValue;

    @Override 
    public void setValue(Person value) {
        companyInfo.setVisible(value.getCompanyInfo() != null);
        personInfo.setVisible(value.getPersonInfo() != null);
    }

    @UiHandler("btnAddCompany")
    protected void onAddCompany(ClickEvent ev) {
        CompanyBasicInfo bci = new CompanyBasicInfo();
        myValue.getValue().setCompanyInfo(bci);
        companyInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor
    }

    @UiHandler("btnAddPerson")
    protected void onAddPerson(ClickEvent ev) {
        PersonBasicInfo bci = new PersonBasicInfo();
        myValue.getValue().setPersonInfo(bci);
        personInfo.setValue(bci); // the setValue() function handles the prior unset optional field editor
    }

[ ... remaining stuff ... ]
}

子编辑应为IsEditor<OptionalFieldEditor>。您可以在gwtproject页面上找到OptionalFieldEditors的示例,即iirc。

希望这可以帮助你前进。