我正在尝试实现一个包含 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();
}
}
NotificationDataPanel
单独在表单中效果很好,另一方面我可以ListView
在表单中使用它(而不是在单独的表单组件中)。
工作正常:
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);
但是当我尝试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
类:
class TestFormBean implements Serializable {
List<NotificationDataBean> notiL;
}
异常中的listView这个词是指ListView
id 中的NotificationDataListPanel
。
提前感谢任何提示如何解决这个问题,请接受我对我糟糕的英语的道歉。