Wicket DropDownChoice无法正常使用PropertyModels

时间:2013-11-29 09:49:05

标签: java wicket dropdownchoice

我一直在尝试调试为什么我的DropDownChoice只是一个简单的形式,只有DropDown和一个提交按钮现在几个小时都没有正常工作。

它有一种非常奇怪的行为。在下拉选项中选择的第一个值成功发送到服务器的位置,之后模型不会更新任何其他选择选择。即如果我有一个列表人员,并且我选择了第二个人,则它会成功提交。但是,在选择其他人并尝试再次提交时,它会一直显示第一个选定的选项。

这里的代码片段:

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

如果我将上面的赋权变量设置为null,那么我能够获得一个体面的行为。在这种情况下,在提交时,授权被重新初始化为null,然后新的提交正常工作。

授权只是一个JPA实体。

我很高兴知道这是否是一个已知问题。我在wicket 6.9.1和wicket 6.12中经历过它。

2 个答案:

答案 0 :(得分:4)

最后,找到了问题的解决方案。上面的代码是正确的,但问题在实体类本身中存在 - Empowerment需要正确实现Equals和Hashcode。

DropDownChoice在此之后工作正常。

答案 1 :(得分:3)

OnChangeAjaxBehavior添加DropDownChoice。这将更新您在下拉列表中进行的每个选择更改的模型值:

empowermentDropDownChoice .add(new OnChangeAjaxBehavior() {

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