ListView中的表格形式的值更改会影响所有元素

问题描述 投票:0回答:1

我有一个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);

我的问题是:我可以实现某种接口,所以我不必使用“作弊”来初始化具有不同属性值的对象,如果是,是什么/如何做?

java wicket
1个回答
1
投票

您正在展开模型,这不是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);
© www.soinside.com 2019 - 2024. All rights reserved.