Wicket-如何在自定义表单组件中使用ListView?

Wicket-如何在自定义表单组件中使用ListView?,listview,wicket,wicket-1.6,Listview,Wicket,Wicket 1.6,我正在尝试实现一个包含ListView的自定义表单组件 我的自定义表单组件: public class NotificationDataListPanel extends FormComponentPanel { private ListView<NotificationDataBean> listView = null; public NotificationDataListPanel(String id) { this(id, null);

我正在尝试实现一个包含ListView的自定义表单组件

我的自定义表单组件:

public class NotificationDataListPanel extends FormComponentPanel {

    private ListView<NotificationDataBean> listView = null;

    public NotificationDataListPanel(String id) {
        this(id, null);
    }

    public NotificationDataListPanel(String id, List list) {
        super(id);

        listView = new ListView<NotificationDataBean>("listView") {
            @Override
            protected void populateItem(final ListItem<NotificationDataBean> item) {
                final NotificationDataPanel dataPanel = new NotificationDataPanel("dataPanel", new Model<NotificationDataBean>() {
                    @Override
                    public NotificationDataBean getObject() {
                        return item.getModel().getObject();
                    }

                    @Override
                    public void setObject(final NotificationDataBean value) {
                        item.setModelObject(value);
                    }
                });
                item.add(dataPanel);
            }
        };
        add(listView);

        add(new AjaxLink("addNewNDPanel") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                List<NotificationDataBean> modelObject = listView.getModelObject();
                if (modelObject == null) {
                    modelObject = new ArrayList<NotificationDataBean>();
                }
                modelObject.add(new NotificationDataBean());
                listView.setModelObject(modelObject);

                target.add(this);
            }
        });
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        List<NotificationDataBean> modelObject = (List<NotificationDataBean>) getModelObject();
        if (modelObject != null && !modelObject.isEmpty()) {
            listView.setModelObject(modelObject);
        } else {
            listView.setModel(new Model());
        }
    }

    @Override
    protected void convertInput() {
        List<NotificationDataBean> modelObject = listView.getModelObject();

        setConvertedInput(modelObject);
        updateModel();
    }
}
    final Form form = new Form("form", new CompoundPropertyModel(testFormBean));

    final ListView<NotificationDataBean> strs = new ListView<NotificationDataBean>("notiL") {
        @Override
        protected void populateItem(final ListItem<NotificationDataBean> item) {
            final NotificationDataPanel quxField = new NotificationDataPanel("str", new Model<NotificationDataBean>() {
                @Override
                public NotificationDataBean getObject() {
                    return item.getModel().getObject();
                }

                @Override
                public void setObject(final NotificationDataBean value) {
                    item.setModelObject(value);
                }
            });
            item.add(quxField);
        }
    };
    form.add(strs);
class TestFormBean implements Serializable {
    List<NotificationDataBean> notiL;
}
但当我试图在分离表单组件中的
ListView
中使用它时,我遇到了这个异常

Last cause: No get method defined for class: class TestFormBean expression: listView
不正常

    final Form form = new Form("form", new CompoundPropertyModel(testFormBean));
    form.add(new NotificationDataListPanel("notiL"));
TestFormBean
类:

public class NotificationDataListPanel extends FormComponentPanel {

    private ListView<NotificationDataBean> listView = null;

    public NotificationDataListPanel(String id) {
        this(id, null);
    }

    public NotificationDataListPanel(String id, List list) {
        super(id);

        listView = new ListView<NotificationDataBean>("listView") {
            @Override
            protected void populateItem(final ListItem<NotificationDataBean> item) {
                final NotificationDataPanel dataPanel = new NotificationDataPanel("dataPanel", new Model<NotificationDataBean>() {
                    @Override
                    public NotificationDataBean getObject() {
                        return item.getModel().getObject();
                    }

                    @Override
                    public void setObject(final NotificationDataBean value) {
                        item.setModelObject(value);
                    }
                });
                item.add(dataPanel);
            }
        };
        add(listView);

        add(new AjaxLink("addNewNDPanel") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                List<NotificationDataBean> modelObject = listView.getModelObject();
                if (modelObject == null) {
                    modelObject = new ArrayList<NotificationDataBean>();
                }
                modelObject.add(new NotificationDataBean());
                listView.setModelObject(modelObject);

                target.add(this);
            }
        });
    }

    @Override
    protected void onBeforeRender() {
        super.onBeforeRender();
        List<NotificationDataBean> modelObject = (List<NotificationDataBean>) getModelObject();
        if (modelObject != null && !modelObject.isEmpty()) {
            listView.setModelObject(modelObject);
        } else {
            listView.setModel(new Model());
        }
    }

    @Override
    protected void convertInput() {
        List<NotificationDataBean> modelObject = listView.getModelObject();

        setConvertedInput(modelObject);
        updateModel();
    }
}
    final Form form = new Form("form", new CompoundPropertyModel(testFormBean));

    final ListView<NotificationDataBean> strs = new ListView<NotificationDataBean>("notiL") {
        @Override
        protected void populateItem(final ListItem<NotificationDataBean> item) {
            final NotificationDataPanel quxField = new NotificationDataPanel("str", new Model<NotificationDataBean>() {
                @Override
                public NotificationDataBean getObject() {
                    return item.getModel().getObject();
                }

                @Override
                public void setObject(final NotificationDataBean value) {
                    item.setModelObject(value);
                }
            });
            item.add(quxField);
        }
    };
    form.add(strs);
class TestFormBean implements Serializable {
    List<NotificationDataBean> notiL;
}
类TestFormBean实现可序列化{
罗列诺蒂尔;
}
异常情况下,listView一词指的是
NotificationDataListPanel
中的
listView
id


提前感谢您提供有关如何解决此问题的任何提示,并请接受我对我英语不好的歉意。

您没有为ListView提供模型,因此它将在组件层次结构中搜索一个模型。 CompountPropertyModel为子组件提供模型,并使用其id在其模型上查找属性

您可能只想做:

new ListView<NotificationDataBean>("listView", list);
新建列表视图(“列表视图”,列表);