我有一个ListView
,我用来添加多行带有表单元素(文本输入,选择等)的行,这些表单元素对应于作为元素列表的模型上的属性。第一次加载表单时,元素将初始化为该类的新实例。 Wicket似乎无法区分它们,除非我明确地向该对象的属性添加不同的值。仅当我更改ListView
的最后一行中的内容时,该值才会更改,并且当它更改时,它会更改所有这些值,就好像它们都是同一对象一样。
例如:
Arrays.asList(new String(), new String(), new String());
VS。
Arrays.asList("a", "b", "c");
Wicket仅在以第二种方式实现传递到ListView
的列表时才更改单个行的值。
这是我使用的代码的简化示例:
WebMarkupContainer container = new WebMarkupContainer("container");
ListView<String> listView = new ListView<String>("meetingFiles", model.getObjectsList()) {
@Override
protected void populateItem(final ListItem listItem) {
listItem.add(new TextField<String>("string", new PropertyModel<>(listItem.getModelObject(), "stringField")));
}
};
listView.setReuseItems(true);
container.add(listView);
form.add(container);
我的问题是:我可以实现某种接口,所以我不必使用“作弊”来初始化具有不同属性值的对象,如果是,是什么/如何做?
您正在展开模型,这不是Wicket式的,很可能是造成问题的原因。
我将代码重写为如下形式:
ListView<String> listView = new ListView<String>("meetingFiles", model) {
@Override
protected void populateItem(final ListItem<String> listItem) {
listItem.add(new TextField<String>("string", listItem.getModel()));
}
};
listView.setReuseItems(true);
container.add(listView);
form.add(container);