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