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 回答