我有一個相當複雜的表單,其表單字段的數量是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);
}
}
,它工作正常,1個,文本區域的每種語言創建,其值也設置很好;甚至在更改模型按預期進行更新時更是如此。
如果您在清空文本區域(因此最初有一個值)之後提交表單,那麼當然存在驗證錯誤(必需)。正常(檢票)的行爲將是無效字段仍然是空的,但由於某種原因,原來的價值被重置,我不明白爲什麼。
如果我重寫的onError這樣的:
@Override
protected void onError() {
this.updateFormComponentModels();
}
則罰款,該字段的值設置爲提交的值(空)而不是原始值。
任何想法是什麼造成這種情況?什麼是wicket因爲我設置窗體的方式而無法完成(因爲使用簡單的窗體/模型,這與wicket示例一樣工作正常)?
看一看的ListView的API(http://wicket.apache.org/apidocs/1.5/org/apache/wicket/markup/html/list/ListView.html) ESP。 setReuseItems()。 – bert
你是我今天的英雄:-)。請再次發佈這個答案,我可以接受你的答案。 –