3

Grailsコマンドオブジェクトを使用してアクションパラメーターをフィルタリングしようとしています。しかし、パラメータがURLに存在しない場合は、デフォルト値を設定したいと思います。

class ListCommand {

    String order = 'desc'
    String sort = 'startDate'

}

def list(ListCommand cmd) {
    println cmd.order
}

ドメインオブジェクトを作成する場合と同じように動作すると思いました。次のようなアクションで各パラメーターを処理したくありません。

cmd.order = params.order ?: 'desc'
4

2 に答える 2

2

このようなアクション宣言を常に使用する場合:

def list(ListCommand cmd) { ... }

また

def list = {ListCommand cmd -> ...}

あなたはこれを試すことができます:

class ListCommand {
    String order
    String sort

    def beforeValidate() {
        order = order ?: 'desc'
        sort = sort ?: 'startDate'
    }
}

これらのアクション定義では、validate()メソッドは常にコマンドオブジェクトを呼び出すためです。

于 2012-12-14T19:50:01.140 に答える
0

コマンド オブジェクト フィールドにデフォルト値を設定できるとは思えません。

パラメータをバインドする前に、コマンド オブジェクトをデフォルト値で初期化するサービスを作成することをお勧めします。

def service

def action = {
    def listCommand = service.createListCommand() 
    bindData(listCommand, params)
}


class Service {
   def createListCommand() {
       def listCommand  = new ListCommand()
       initDefaultValues(listCommand)
       return listCommand
   }

def initDefaultValues(def listCommand){
        listCommand.order = 'desc'
        listCommand.sort = 'startDate'
    }
}
于 2012-12-14T15:03:23.530 に答える