这是我的问题,我有一个必需的 DropDownChoices。但是在我的选择列表中,我有一个带有空/空代码的项目,我认为这是一个有效的答案。我可以让它接受(下面的解决方案),但我不能让它用正确的值初始化。
这是想法,我有这个对象:Item { String code; String label}
和下一个代码:
List<Item> choices = new ArrayList<Item>();
choices.add(new Item("ok","labelOk"));
choices.add(new Item("","labelEmpty"));
ChoiceRenderer<Item> renderer = new ChoiceRenderer<Item>("label", "code");
DropDownChoice<Item> s = new DropDownChoice<Item>("id", Model.of(new Item("","labelEmpty")), choices, renderer);
s.setRequired(true);
就这样,不接受第二个选择。所以我创建了一个自定义渲染器来用 none 替换我的 null 值:
public class ItemChoiceRenderer extends ChoiceRenderer<Item> {
public TListItemChoiceRenderer() {super("label", "code");}
@Override
public String getIdValue(Item object, int index) {
if (object != null && StringUtils.isNullOrEmpty(object.getCode())) {
return "none";
}
return super.getIdValue(object, index);
}
}
有了这个,我可以选择第二个选项。但是 DropDownChoices 没有初始化正确的值,它在开始时选择“选择一个”。
看起来组件不使用渲染器来选择它的字段,但我看不出为什么,以及如何纠正这个问题。