我一直在尝试调试为什么我的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中经历过它。
答案 0 :(得分:4)
最后,找到了问题的解决方案。上面的代码是正确的,但问题在实体类本身中存在 - Empowerment需要正确实现Equals和Hashcode。
DropDownChoice在此之后工作正常。
答案 1 :(得分:3)
向OnChangeAjaxBehavior
添加DropDownChoice
。这将更新您在下拉列表中进行的每个选择更改的模型值:
empowermentDropDownChoice .add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
//just model update
}
});