Java Wicket-更新PropertyModel时表单组件失去引用

Java Wicket-更新PropertyModel时表单组件失去引用,java,forms,hibernate,wicket,dropdownchoice,Java,Forms,Hibernate,Wicket,Dropdownchoice,我有一个带有一些字段和下拉选项的表单。其中一个是动态填充的:当状态被填充时,城市下拉列表被更新,在这里之前都是可以的 动态填充下拉列表(我使用hibernate作为ORM): 那个小门能用吗?如果组件的属性模型引用接收到新对象,组件将丢失其引用,需要显式重置?使用新属性模型(form.getModel(),“umf.state”)更改新属性模型(umf,“state”)。同样适用于城市 您面临的问题是,一旦将umf传递到PropertyModel中,它就会作为自己的成员字段保存在其中。稍后更改表

我有一个带有一些字段和下拉选项的表单。其中一个是动态填充的:当状态被填充时,城市下拉列表被更新,在这里之前都是可以的

动态填充下拉列表(我使用hibernate作为ORM):


那个小门能用吗?如果组件的属性模型引用接收到新对象,组件将丢失其引用,需要显式重置?

使用
新属性模型(form.getModel(),“umf.state”)
更改
新属性模型(umf,“state”)
。同样适用于
城市

您面临的问题是,一旦将
umf
传递到
PropertyModel
中,它就会作为自己的成员字段保存在其中。稍后更改表单中的引用,但PropertyModel仍然指向其成员字段,即旧字段


通过传递表单的模型,它变得动态-每当PropertyModel需要状态时,它都会向表单的模型请求modelObject。

使用
新属性模型(form.getModel(),“umf.state”)
更改
新属性模型(form.getModel(),“umf.state”)
。同样适用于
城市

您面临的问题是,一旦将
umf
传递到
PropertyModel
中,它就会作为自己的成员字段保存在其中。稍后更改表单中的引用,但PropertyModel仍然指向其成员字段,即旧字段


通过传递表单的模型,它将变得动态—每当PropertyModel需要状态时,它都会向表单的模型询问modelObject。

找到了解决方案。我开始以以下形式使用CompoundPropertyModel:

umf = new Umf();
CompoundPropertyModel model = new CompoundPropertyModel(umf);
setDefaultModel(model);
然后组件模型引用它:

nameModel = new RequiredTextField("name", model.bind("name"));

DropDownChoice statesChoice = new DropDownChoice<State>(
    "states",
    new PropertyModel(getModel(), "state"),
    em.createQuery("from Estado e").getResultList(),
    new ChoiceRenderer<State>("name")
);
// and so on

这样组件就不会丢失表单的引用。

找到了解决方案。我开始以以下形式使用CompoundPropertyModel:

umf = new Umf();
CompoundPropertyModel model = new CompoundPropertyModel(umf);
setDefaultModel(model);
然后组件模型引用它:

nameModel = new RequiredTextField("name", model.bind("name"));

DropDownChoice statesChoice = new DropDownChoice<State>(
    "states",
    new PropertyModel(getModel(), "state"),
    em.createQuery("from Estado e").getResultList(),
    new ChoiceRenderer<State>("name")
);
// and so on

这样,组件就不会丢失表单的引用。

感谢您的澄清,通过您的回答,我找到了一个解决方案,但由于您是Wicket团队的成员,我有一些问题:-onSubmit方法我正在运行
clearInput()
,但它不起作用,只有在表单验证失败时。。为什么使用CompoundPropertyModel是否总是好的使用它,有必要保留简单的组件引用(如TextFields),或者我可以简单地通过
add添加它们(newtextfield(“name”,model.bind(“name”)
,跳过TextField声明?提前感谢:)感谢您的澄清,通过您的回答,我找到了一个解决方案,但由于您在Wicket团队中,我有一些问题:-onSubmit方法我正在运行
clearInput()
,但它不起作用,只有在表单验证失败时才起作用..为什么?-使用CompoundPropertyModel总是很好的?-使用它,有必要保持简单组件的引用(比如TextField)或者我可以简单地添加它们,只需执行
add(newtextfield(“name”,model.bind(“name”)
,跳过TextField声明?提前感谢:)
umf = new Umf();