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、それはnullです。contactsの代わりに各 select に名前を付ける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 に答える