1

我有一个表格,我必须专门订购输入元素。所以我的表格看起来像这样:

<input type="text" name="name"/>
<select name="contacts.first">...</select>
<select name="contacts.second">...</select>
...

我有一个命令对象,我试图用它来验证这个表单。但是,我似乎无法正确映射。我的命令对象如下所示:

@Validatable
class MyCommand {
     def name
     def contacts

     static constraints = { /* ... */ }
}

我的控制器动作如下所示:

def update = { MyCommand cmd -> 
    if (cmd.validate()) {
         /* ... */
    }
}

当我查看时cmd.contacts,它是空的。如果我只命名每个 selectcontacts而不是contacts.first,它是一个预期的值数组,但我不想依赖浏览器来确保这些项目按特定顺序排列。对这项工作有什么建议吗?正确的顺序至关重要。

4

1 回答 1

2

最初的想法:http ://stateyourbizness.blogspot.com/2009/02/binding-to-collection-fields-on-command.html

因此,对于您的命令对象,您可以使用:

import org.apache.commons.collections.FactoryUtils;
import org.apache.commons.collections.ListUtils;

class MyCommand {
    def name
    List contacts = ListUtils.lazyList([], FactoryUtils.constantFactory(''))
    /* ... */
}

并让您的 html 看起来像:

<input type="text" name="name"/>
<select name="contacts[0]">...</select>
<select name="contacts[1]">...</select>
于 2011-08-24T14:33:48.610 回答