我在Wicket Framework工作。我创建了一个列在listview上的数据列表。 对于每个组件,我添加一个Model,其模型包含我的Class列表中的一个元素,其中包含该值。 保存表单后,我收集列表中的每个元素以保存在我的数据库中。列表为空,没有更改的值。你能解释一下原因吗?
这是我的代码的一部分,以解决这个问题:
List是我班上的全局变量:
public List<ShowFormData> listofdata;
我填写清单:
listofdata = new ArrayList<>();
//we list all empty data
for (ExtensibleTemplateElement extensibleTemplateElementList1 : extensibleTemplateElementList) {
listofdata.add(new ShowFormData(extensibleTemplateElementList1.getDataFieldName(), null, "", "", Boolean.FALSE, extensibleTemplateElementList1, extensibleTemplateElementList1.getExtensibleDataType().getExtensibleDataTypeId(), Boolean.FALSE, 0));
}
在这里,我使用列表元素
影响我的组件 listview = new ListView<Object>("list", listofdata) {
@Override
protected void populateItem(ListItem<Object> li) {
final ShowFormData showformData = (ShowFormData) li.getModelObject();
....
li.add(new TextField("textfield", new Model<String>(showformData.getData())));
....
li.add(new TextArea("textaera", new Model<String>(showformData.getData())));
....
}
}
这时当我按下AjaxButton时保存
AjaxButton savebutton;
savebutton = (AjaxButton) new AjaxButton("save_ext", form) {
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
super.onError(target, form); //To change body of generated methods, choose Tools | Templates.
System.out.println("save button ajax error it is impossible to save");
//target.appendJavaScript("stopLoading();");
}
@Override
public void onSubmit(AjaxRequestTarget target, Form<?> form) {
....
for (int i = 0; i < listofdata.size(); i++) {
....
extensibleDatum.setValue(listofdata.get(i).getData());
extensibleFormBO.save(extensibleDatum);
....
}
}
答案 0 :(得分:0)
在表单中使用ListView时,您必须致电listView.setReuseItems(true)
- https://github.com/apache/wicket/blob/cab6795aa64fe2280a938f69bb304255f2fc9bbe/wicket-core/src/main/java/org/apache/wicket/markup/html/list/ListView.java#L84
您必须使用new Model<String>(showformData.getData())
而不是new PropertyModel<String>(showformData, "data"))
。这样,新值将保存在ShowFormData的数据字段中。
使用ListView避免强制转换。