Wicket 表单字段在验证错误时重置

Wicket 表单字段在验证错误时重置,wicket,wicket-1.5,Wicket,Wicket 1.5,我有一个相当复杂的表单,表单字段的数量是flexibel。简而言之,模型对象是一个TLabel TranslationLabel,其中包含值转换的映射。这里的语言是一个枚举,因此其思想是为其提供翻译的字段和文本区域的数量取决于此枚举中的值 这是我的简化表格: 公共类TranslationEditForm扩展了表单{ private final static List<Language> LANGUAGES = newArrayList(Language.values()); pub

我有一个相当复杂的表单,表单字段的数量是flexibel。简而言之,模型对象是一个TLabel TranslationLabel,其中包含值转换的映射。这里的语言是一个枚举,因此其思想是为其提供翻译的字段和文本区域的数量取决于此枚举中的值

这是我的简化表格:

公共类TranslationEditForm扩展了表单{

private final static List<Language> LANGUAGES = newArrayList(Language.values());

public TranslationEditForm(String id, final TranslationLabelView label) {
    super(id, new CompoundPropertyModel<TranslationLabelView>(label));

    ListView<Language> textAreas = new ListView<Language>("translationRepeater", LANGUAGES) {

        @Override
        protected void populateItem(final ListItem<Language> itemLang) {
            //loop through the languages and create 1 textarea per language
            itemLang.add(new Label("language", itemLang.getModelObject().toString()));
            Model<String> textModel = new Model<String>() {

                @Override
                public String getObject() {
                    //return the value for current language
                    return label.getValue(itemLang.getModelObject());
                }

                @Override
                public void setObject(String object) {
                    //set the value for current language
                    label.getTranslations().put(itemLang.getModelObject(), object);
                }
            };
            itemLang.add(new TextArea<String>("value", textModel).setRequired(true));
        }
    };
    //add the repeater containing a textarea per language to the form
    this.add(textAreas);
}
}
这样就可以了,字段的值被设置为提交值空,而不是原始值


知道是什么原因导致了这种情况吗?wicket没有做什么,因为我设置表单的方式很简单,因为使用简单的表单/模型,它和wicket示例一样工作正常?

作为答案发布,因此问题可以标记为已解决:

ListView会在渲染时重新创建其所有项。这意味着验证将被破坏。请查看

在ListView上调用setReuseItems可以解决这个问题

问候,,
Bert

看看ListView特别是setReuseItems的API。你是我心目中的英雄:-。请再次发布此消息,作为我可以接受你的答案的答案。
@Override
protected void onError() {
    this.updateFormComponentModels();
}