Java ListView中的Wicket表单组件值更改会影响所有元素
我有一个Java ListView中的Wicket表单组件值更改会影响所有元素,java,wicket,Java,Wicket,我有一个列表视图用于添加多行,其中包含表单元素(文本输入、选择等),这些元素对应于作为元素列表的模型上的属性。当表单第一次加载时,元素被初始化为该类的新实例。Wicket似乎无法区分它们,除非我显式地向该对象的属性添加不同的值。它只在我更改列表视图最后一行中的某个内容时更改值,当它更改时,它会更改所有内容,就像它们都是同一个对象一样 例如: Arrays.asList(new String(), new String(), new String()); vs 当以第二种方式实现传递到List
列表视图
用于添加多行,其中包含表单元素(文本输入、选择等),这些元素对应于作为元素列表的模型上的属性。当表单第一次加载时,元素被初始化为该类的新实例。Wicket似乎无法区分它们,除非我显式地向该对象的属性添加不同的值。它只在我更改列表视图最后一行中的某个内容时更改值,当它更改时,它会更改所有内容,就像它们都是同一个对象一样
例如:
Arrays.asList(new String(), new String(), new String());
vs
当以第二种方式实现传递到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);
WebMarkupContainer=新的WebMarkupContainer(“容器”);
ListView ListView=新建ListView(“propertyListView”,model.getObjectsList()){
@凌驾
受保护的void populateItem(最终列表项列表项){
添加(新文本字段(“字符串”,新属性模型(listItem.getModelObject(),“stringField”));
}
};
setReuseItems(true);
container.add(listView);
表格.加入(容器);
我的问题是:是否有某种类型的接口可以实现,这样我就不必使用初始化具有不同属性值的对象的“欺骗”,如果是,是什么/如何实现的?您正在展开模型,这不是很危险,可能是您出现问题的原因
我将代码重写为如下内容:
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);
ListView ListView=新建ListView(“会议文件”,模型){
@凌驾
受保护的void populateItem(最终列表项列表项){
添加(新的文本字段(“字符串”,listItem.getModel());
}
};
setReuseItems(true);
container.add(listView);
表格.加入(容器);
您正在展开模型,这并不是很危险,可能是您出现问题的原因
我将代码重写为如下内容:
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);
ListView ListView=新建ListView(“会议文件”,模型){
@凌驾
受保护的void populateItem(最终列表项列表项){
添加(新的文本字段(“字符串”,listItem.getModel());
}
};
setReuseItems(true);
container.add(listView);
表格.加入(容器);
我想你可能误解了。ListItem-ListItem
中的项目是需要在ListView
中迭代的项目。您应该为您的问题提供更多细节和解释。您的模型对象是字符串列表吗?不,对象列表是模型上的属性,这就是传递到列表视图的内容。我试图在问题的第一句话中解释,我想你可能误解了。ListItem-ListItem
中的项目是需要在ListView
中迭代的项目。您应该为您的问题提供更多细节和解释。您的模型对象是字符串列表吗?不,对象列表是模型上的属性,这就是传递到列表视图的内容。我试图在问题的第一句话中解释这一点