Gwt 如何为ListEditor设置支持列表

Gwt 如何为ListEditor设置支持列表,gwt,Gwt,我已经说过,我目前正试图进入gwt编辑器。 我想我缺少了一个支持列表来保存我操作的数据。 我试图通过父视图的setValue调用来分配支持列表。现在编译器抱怨它缺少groupList的getter。 我知道按照惯例,groupList属性是通过命名编辑器groupListEditor派生的。附加列表的正确方式是什么?似乎我需要用一个列表调用setValue,否则它似乎不起作用。正确的方法是什么 我的编辑器如下所示: public class GroupListEditor extends Com

我已经说过,我目前正试图进入gwt编辑器。 我想我缺少了一个支持列表来保存我操作的数据。 我试图通过父视图的setValue调用来分配支持列表。现在编译器抱怨它缺少groupList的getter。 我知道按照惯例,groupList属性是通过命名编辑器groupListEditor派生的。附加列表的正确方式是什么?似乎我需要用一个列表调用setValue,否则它似乎不起作用。正确的方法是什么

我的编辑器如下所示:

public class GroupListEditor extends Composite implements
        IsEditor<ListEditor<String, GroupItemEditor>> {

    private static StringListEditorUiBinder uiBinder = GWT
            .create(StringListEditorUiBinder.class);

    interface StringListEditorUiBinder extends
            UiBinder<Widget, GroupListEditor> {
    }

    @UiField
    FlowPanel pWidget;

    @UiField
    PushButton bAdd;

    @UiField
    FlowPanel pList;


    private class StringItemEditorSource extends EditorSource<GroupItemEditor> {
        @Override
        public GroupItemEditor create(final int index) {
            GroupItemEditor subEditor = new GroupItemEditor();
            pList.insert(subEditor, index);
            subEditor
                    .addDeleteHandler(new EditorDeleteEvent.EditorDeleteHandler() {
                        public void onEditorDeleteEvent(EditorDeleteEvent event) {
                            remove(index);
                        }
                    });
            return subEditor;
        }

        @Override
        public void dispose(GroupItemEditor subEditor) {
            subEditor.removeFromParent();
        }

        @Override
        public void setIndex(GroupItemEditor editor, int index) {
            pList.insert(editor, index);
        }
    }

    private ListEditor<String, GroupItemEditor> editor = ListEditor
            .of(new StringItemEditorSource());



    public GroupListEditor() {
        initWidget(uiBinder.createAndBindUi(this));
    }


    @UiHandler("bAdd")
    void onBAddClick(ClickEvent event) {
        Log.debug("Add button clicked");
        add();
    }

    private void add() {
        String s = "";
        //TODO: Problem is there is no backing list, FIx this
        editor.getList().add(s);
    }

    @Override
    public ListEditor<String, GroupItemEditor> asEditor() {
        return editor;
    }

    private void remove(final int index) {
        editor.getList().remove(index);
    }

}
所需的ContainerGetter是否不应命名为getGroupList? 您指的是DeviceTo,它只是随身携带的,不应该干扰编辑器。 因为GroupListEditor实现了

IsEditor<ListEditor<String, GroupItemEditor>>
它引用了editor.getList.adds,这意味着没有列表

更新2: 我将UIField的声明更改为:

@UiField
@Path("groupList")
GroupListEditor groupListEditor;

但当我像以前一样尝试向列表中添加内容时,仍然会出现NullPointerException:editor.getList.adds

不必手动调用setList将列表传递给子编辑器。这应该由父/容器编辑器为您处理

但是,编辑器将使用UiField名称来匹配备份DTO中相应的getter

在上面的示例中,仅当DeviceTo具有getGroupListEditor getter,该getter返回ListEditor期望的类型,因为@UiField GroupListEditor GroupListEditor;时,这才起作用

如果DeviceTo不包含相应的getter,则可以执行3项操作:

重命名@UiField GroupListEditor GroupListEditor;i、 e.分组项目 将DeviceTo中的getter重命名为getGroupListEditor 将路径“groupItems”添加到@UiField GroupListEditor GroupListEditor; 解决方案3通常是可行的:

@UiField     
@Path('groupItems')
GroupListEditor groupListEditor;
注意:ChangeGroupItems必须匹配DeviceTo中返回组项的getter

更新:

这就是DeviceTo的外观以及如何使用Path将编辑器指向正确的getter。只要您的groupList类变量初始化为空ArrayList,一切都会正常工作

class DeviceDTO {
  protected List<String> groupList = new ArrayList<String>();
  public List<String> getGroupList() {
      return groupList;
  }
}

public class ContainerEditorDialogView extends
    PopupViewWithUiHandlers<ContainerEditorDialogUiHandlers> implements
    ContainerEditorDialogPresenterWidget.MyView, Editor<ContainerDto> {

    ....
    @UiField     
    @Path("groupList")
    GroupListEditor groupListEditor;     
}

我编辑了上面的问题以获得更复杂的回答。唯一不同的是:我将groupList声明为ArrayList,而不是List。这就是答案吗?现在它起作用了。非常感谢你。这真的帮了我的忙!不,如果ContainerTo有一个名为getGroupList的getter,那么GroupListEditor也必须名为groupList。或者您添加一个路径declarion以将其指向正确的getter请参见下面的“我的答复”ID确保您的组列表已初始化为空数组列表请参见下面的upadte?
IsEditor<ListEditor<String, GroupItemEditor>>
protected ArrayList<String> groupList;
Caused by: java.lang.NullPointerException: null     at 
testproject.client.application.containers.editor.GroupListEditor.add(GroupListEditor.java:81)
at testproject.client.application.containers.editor.GroupListEditor.onBAddClick(GroupListEditor.java:76)
@UiField
@Path("groupList")
GroupListEditor groupListEditor;
@UiField     
@Path('groupItems')
GroupListEditor groupListEditor;
class DeviceDTO {
  protected List<String> groupList = new ArrayList<String>();
  public List<String> getGroupList() {
      return groupList;
  }
}

public class ContainerEditorDialogView extends
    PopupViewWithUiHandlers<ContainerEditorDialogUiHandlers> implements
    ContainerEditorDialogPresenterWidget.MyView, Editor<ContainerDto> {

    ....
    @UiField     
    @Path("groupList")
    GroupListEditor groupListEditor;     
}