我有一个 freemarker 页面,我需要从条目列表中发布一个条目。
为了克服 spring.formInput 和 freemarker 列表的问题(请参阅问题here),我以以下方式构造 html 表单:
<#list entries as entry>
<@form.form method="POST" commandName="receiver">
<@spring.formInput "entries.entry[${entry_index}].name"/>
<@spring.formInput "entries.entry[${entry_index}].value"/>
</@form.form>
</#list>
我的控制器看起来像这样:
@RequestMapping(method=POST, params="save")
public String save(@ModelAttribute(value="entries") @Valid Entries entries, BindingResult result, Model model){
/*notice, we always get the last item in the list, since the entries "carries" the index of the form through, and creates
* null-object in the first n places
*/
int index = entries.size()-1;
Entry entry = entries.get(index);
if (!result.hasErrors()) {
formService.save(entry);
}
return "";
}
不幸的是,每当我发布一个条目而不是列表中的第一个条目时,@Valid 注释都会导致错误。
发生这种情况是因为 spring 自动使用 null 值填充我的列表,直到当前索引。
- 我更愿意发布条目而不是条目,但我认为这不能做到。
- 或者,如何停止对列表中的前 n-1 个条目进行验证?
- 或者,我可以以某种方式测试列表(索引)中的哪个对象导致错误,这样我就可以避免前 n-1 个条目中的错误?