gpt4 book ai didi

java - ListView 内的 Wicket 表单组件值更改会影响所有元素

转载 作者:行者123 更新时间:2023-12-02 01:18:50 26 4
gpt4 key购买 nike

我有一个 ListView,我用它来添加多行表单元素(文本输入、选择等),这些元素对应于作为元素列表的模型上的属性。当表单首次加载时,元素被初始化为该类的新实例。 Wicket 似乎无法区分它们,除非我明确向该对象的属性添加不同的值。仅当我更改 ListView 最后一行中的某些内容时,它才会更改值,并且当更改时,它会更改所有这些值,就好像它们都是同一个对象一样。

例如:

Arrays.asList(new String(), new String(), new String()); 

对比

Arrays.asList("a", "b", "c");

当以第二种方式实现传递到 ListView 的列表时,Wicket 仅更改单个行的值。

这是我正在使用的代码的简化示例:

WebMarkupContainer container = new WebMarkupContainer("container");
ListView<String> listView = new ListView<String>("propertyListView", 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);

我的问题是这样的:是否可以实现某种接口(interface),这样我就不必使用使用不同属性值初始化对象的“作弊”方法,如果可以,该怎么办?

最佳答案

您正在打开模型,这不太像 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);

关于java - ListView 内的 Wicket 表单组件值更改会影响所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com