Java Wicket DropDownChoice无法正确使用PropertyModels

Java Wicket DropDownChoice无法正确使用PropertyModels,java,wicket,dropdownchoice,Java,Wicket,Dropdownchoice,我一直在试着调试为什么我的DropDownChoice在一个简单的表单中,只有一个下拉菜单和一个Submit按钮几个小时没有正常工作 它有一种非常奇怪的行为。其中,在下拉选项中选择的第一个值成功发送到服务器,之后模型不会更新任何其他选项选择。也就是说,如果我有一个名单的人,我选择了第二个人,它提交这个成功。但是,在选择另一个人并尝试再次提交时,它会继续显示第一个选择的选项 下面是代码片段: ChoiceRenderer<Empowerment> empowermentChoiceR

我一直在试着调试为什么我的DropDownChoice在一个简单的表单中,只有一个下拉菜单和一个Submit按钮几个小时没有正常工作

它有一种非常奇怪的行为。其中,在下拉选项中选择的第一个值成功发送到服务器,之后模型不会更新任何其他选项选择。也就是说,如果我有一个名单的人,我选择了第二个人,它提交这个成功。但是,在选择另一个人并尝试再次提交时,它会继续显示第一个选择的选项

下面是代码片段:

 ChoiceRenderer<Empowerment> empowermentChoiceRenderer = new ChoiceRenderer<>("name", "id");
 final DropDownChoice<Empowerment> empowermentDropDownChoice =
                    new DropDownChoice<>("empowerment", new PropertyModel<Empowerment>(this, "empowerment"), empowermentList, empowermentChoiceRenderer);
 empowermentDropDownChoice.setRequired(true);
 add(empowermentDropDownChoice);
Choicender授权Choicender=新的Choicender(“姓名”、“id”);
最终下拉选择授权下拉选择=
新下拉选择(“授权”、新PropertyModel(“授权”)、授权列表、授权选择器);
empowermentDropDownChoice.setRequired(true);
添加(授权下拉选择);
我能够获得体面行为的唯一方法是将上面的授权变量设置为null。在这种情况下,在提交时,授权将重新初始化为null,然后新的提交将正常工作

授权只是一个JPA实体


我很高兴知道这是否是一个已知的问题。我在wicket 6.9.1和wicket 6.12中体验到了这一点,在您的
下拉选择中添加
OnChangeAjaxBehavior
。这将在您在下拉列表中所做的每次选择更改中更新模型值:

empowermentDropDownChoice .add(new OnChangeAjaxBehavior() {

    @Override
    protected void onUpdate(AjaxRequestTarget art) {
        //just model update
    }
});

最后,找到了问题的解决方案。上面的代码是正确的,但问题在于实体类本身——授权需要正确地实现Equals和Hashcode


在此之后,DropDownChoice就可以正常工作。

能否在表单中添加OneError()并查看表单处理中是否出现错误?从上面的代码片段来看,到目前为止它看起来不错。嗨,伯特,它总是点击我的onSubmit()方法,但随后会显示第一个选定选项的日志。我怀疑DropDownChoice如何处理PropertyModels可能存在问题。比如为什么我必须将引用设置为null?我现在指的是State/LGA switch经典示例。您在PropertyModel的页面上有一个实体(“授权”)字段(“此”==页面)?我在表单本身上有一个实体授权,作为成员变量。