0

这是我的问题,我有一个必需的 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 没有初始化正确的值,它在开始时选择“选择一个”。

看起来组件不使用渲染器来选择它的字段,但我看不出为什么,以及如何纠正这个问题。

4

1 回答 1

0

没关系,我发现了我的问题,DropDownChoices 的模型没有初始化。

我提出这个问题,因为它显示了我的问题的解决方案,它可能会引起某人的兴趣。

于 2013-08-23T15:26:18.907 回答