表单中带有文本字段的wicket ListView

表单中带有文本字段的wicket ListView,listview,wicket,textfield,Listview,Wicket,Textfield,我创建了一个CustomListView,其中一部分是文本字段,我想在其中设置entity Issue的值: customListView = new ListView<Issue>("fields", issuesModel) { @Override protected void populateItem(final ListItem<Issue> item) { Issue issue = item.getModelOb

我创建了一个CustomListView,其中一部分是文本字段,我想在其中设置entity Issue的值:

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);}}
customListView=新列表视图(“字段”,issuesModel){
@凌驾
受保护的无效填充项(最终列表项){
Issue=item.getModelObject();
添加(新标签(“name”,issue.getName());
TextField customTextField=newtextfield(“customTextField”,新属性模型(问题,“值”);
item.add(customTextField);}
然后我有另一个类,在我添加的ListView组件中有一个表单,每个问题都有几个文本字段,我可以在其中写入值:

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); 
IModel issuemodel=new CompoundPropertyModel(issueValue){
@凌驾
公共列表getObject(){
issueValues=新的ArrayList();
问题;
for(基本情况:基本情况列表){
发行=新发行();
setName(basicIssue.getname());
发行价值。添加(发行);
}
返回issueValues;
}
};
customListView=新customListView(“customListView”,issuesModel);
EditBasicSueform=新表格(“表格”){
@凌驾
受保护的void onSubmit(){
基本问题。设置问题(问题价值);
};
editIssuesForm.add(customListView);
当我填写每个问题的所有文本字段时,只有最后一个值被设置为最后一个问题。所有以前的问题值都为空; 我不知道是什么问题

我的基本情况如下:

    @Entity
public class BasicIssue implements Serializable {
private Long id;
@OneToMany(cascade = CascadeType.ALL)
private List<Issue> issueList;
}
@实体
公共类BasicIssue实现可序列化{
私人长id;
@OneToMany(级联=级联类型.ALL)
私人上市发行人;
}

我以前可能遗漏了一些内容,但我使用customListView中的issuesModel来设置问题的值。在表单中,我需要将此问题列表设置为BasicSue。但是列表是空的。

我想说问题出在模型中。我会使用
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;
        }
 };
LoadableDetachableModel issuesModel=new LoadableDetachableModel(){
受保护对象加载(){
ArrayList issueValues=新的ArrayList();
for(基本情况:基本情况列表){
问题=新问题();
setName(basicIssue.getname());
发行价值。添加(发行);
}
返回issueValues;
}
};
还要注意,
issueValues
实际上是一个局部变量,因此不需要使用实例变量。这同样适用于for循环内部的
issue

final ListView listPe=new ListView(“listPe”,
        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);


        }

    };
映射列表){ 私有静态最终长serialVersionUID=1L; @凌驾 受保护的void populateItem(列表项){ CompoundPropertyModel cmpdModel=新的CompoundPropertyModel( item.getModelObject()); item.setModel(cmpdModel); textField1=新的TextField(“textField1”); 添加项目(文本字段1); textField2=新的TextField(“textField2”); 添加项目(文本字段2); } };
这是我的应用程序的一个简单工作示例,展示了compoundPropertyModel将如何
映射到组件并显示所需信息(在您的案例中为textField)


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

谢谢您的回答。是的,它将与CompondPropertyModel一起工作,但我以前错过了一些东西,所以我犯了错误。我的代码也在工作。BasicSueList由一个项目实体填充,该实体由Ajax在同一页面加载,因此列表为空。我只需要填充issAjaxFormComponentUpdateBehavior中的ueList,onUpdate。