在#list iterator中验证@ spring.formInput

时间:2012-10-30 12:43:56

标签: java spring validation freemarker

我有一个freemarker页面,我需要从条目列表中发布条目。

为了克服spring.formInput和freemarker列表(see problem 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会自动使用空值填充我的列表,直到当前索引。

  • 我更愿意发布条目而不是条目,但我没有 认为这可以做到。
  • 或者,如何停止验证 列表中的前n-1个条目?
  • 或者,我可以以某种方式测试列表(索引)中的哪个对象导致 错误,以便我可以避免前n-1个条目的错误?

1 个答案:

答案 0 :(得分:0)

在几个月前我遇到过类似的问题。但是我在使用 LazyList 时遇到了问题。您可以在question找到答案。希望这会对你有所帮助。