0

我创建了一个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 组件的地方有一个表单,每个问题都有几个 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;我不知道问题是什么。

我的基本问题看起来像:

    @Entity
public class BasicIssue implements Serializable {
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Issue> issueList;
}

我以前错过了一些东西,但是我使用 customListView 中的 issuesModel 来设置问题的值。在表单中,我需要将此问题列表设置为 BasicIssue。但是列表是空的。

4

2 回答 2

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)。

希望它也可以帮助您理解您的问题。

于 2013-11-13T06:17:23.103 回答
0

我会说问题出在模型上。我会使用 aLoadableDetachableModel而不是覆盖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它实际上是一个局部变量,因此不需要使用实例变量。这同样适用于issuefor 循环内部。

于 2013-11-11T11:44:14.360 回答