2

コマンド オブジェクトに存在するプロパティのみをバインドする方法はありますか? 一般的な概念は、明示的に呼び出す必要のない多くの異なるパラメーターがマップにあるということです。

たとえば、マップが与えられた場合、

 def map = ['first': "Nick", 'last': "Capito", 'isRegistered': false ]


@grails.validation.Validateable
class EditCommand{
     String first
     String last 
}

def edit{ EditCommand command ->

}

クラッシュし、エラーをスローしますMessage: No such property: isRegistered for class: EditCommand

私はそれを手動で行ってきました。

new EditCommand(params.findAll{['first', 'last'].grep(it.key)})
4

2 に答える 2

0

トップレベルのパラメータ マップではなく、コマンド オブジェクトを表すマップ/インスタンスを持つようにビューを変更すると、これをきれいに実現できます。

見る:

<g:textField name="editCommand.first" value="${editCommand.first}" />

コントローラ:

def edit(@RequestParameter('editCommand') EditCommand editCommand) {
    if (params.boolean('isRegistered'))
        // etc.
}

または、インスタンスを手動で作成できます。

def edit() {
    EditCommand command = new EditCommand(params.editCommand)
    if (params.boolean('isRegistered'))
        // etc.
}
于 2013-06-13T17:33:45.843 に答える