我创建了一个CustomListView,其中部分是TextField,我想在其中设置实体的值问题:
customListView = new ListView<Issue>("fields", issuesModel) {
@Override
protected void populateItem(final ListItem<Issue> item) {
Issue issue = item.getModelObject();
item.add(new label("name", issue.getName()));
TextField<String> customTextField = new TextField("customTextField", new PropertyModel<String>(issue, "value"));
item.add(customTextField);}}
然后我有另一个类,我在其中添加了这个ListView组件的表单,并且每个Issue都有几个TextField,我可以在其中写入值:
IModel<List<Issue>> issuesModel = new CompoundPropertyModel<List<Issue>>(issueValues) {
@Override
public List<Issue> getObject() {
issueValues = new ArrayList<Issue>();
Issue issue;
for (BasicIssue basicIssue : basicIssuesList) {
issue = new Issue();
issue.setName(basicIssue.getname());
issueValues.add(issue);
}
return issueValues;
}
};
customListView = new CustomListView("customListView", issuesModel);
editBasicIssueForm = new Form("form") {
@Override
protected void onSubmit() {
basicIssue.setIssues(issueValues);
};
editIssuesForm.add(customListView);
当我为每个问题填写所有TextFields时,只将最后一个值设置为上一个问题。以前的所有Issue值都是NULL; 我不知道问题所在。
我的BasicIssue看起来像:
@Entity
public class BasicIssue implements Serializable {
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Issue> issueList;
}
我之前猜测错过了什么,但我使用customListView中的issuesModel来设置问题的值。在表单中,我需要将此问题列表设置为BasicIssue。但清单是空的。
答案 0 :(得分:0)
我会说问题出在模型中。我使用LoadableDetachableModel
代替覆盖CompoundPropertyModel
。然后实现方法load
。
LoadableDetachableModel issuesModel = new LoadableDetachableModel() {
protected Object load() {
ArrayList<Issue> issueValues = new ArrayList<Issue>();
for (BasicIssue basicIssue : basicIssuesList) {
Issue issue = new Issue();
issue.setName(basicIssue.getname());
issueValues.add(issue);
}
return issueValues;
}
};
还要注意issueValues
实际上是局部变量,因此不需要使用实例变量。这同样适用于for循环中的issue
。
答案 1 :(得分:0)
final ListView<mappingListType> listPe = new ListView<mappingListType>("listPe",
mappingList) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<mappingListType> item) {
CompoundPropertyModel<mappingListType> cmpdModel = new CompoundPropertyModel<mappingListType>(
item.getModelObject());
item.setModel(cmpdModel);
textField1 = new TextField<String>("textField1");
item.add(textField1);
textField2 = new TextField<String>("textField2");
item.add(textField2);
}
};
这是我的应用程序的一个简单的工作示例,它显示了compoundPropertyModel将如何 映射到组件并显示所需信息(在您的情况下为textField)。
希望它也能帮助您理解您的问题。