wicket模型不受价值影响

时间:2015-05-07 09:17:56

标签: listview wicket-6

我在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); 
        ....
       }
}

1 个答案:

答案 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避免强制转换。