Wicket-如何在自定义表单组件中使用ListView?
我正在尝试实现一个包含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);
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);
新建列表视图(“列表视图”,列表);