Grails命令对象默认值

Grails命令对象默认值,grails,Grails,我试图使用Grails命令对象来过滤动作参数。但如果URL中不存在该参数,我想设置一个默认值 class ListCommand { String order = 'desc' String sort = 'startDate' } def list(ListCommand cmd) { println cmd.order } 我认为行为将与创建域对象时相同。我不想像这样处理操作中的每个参数: cmd.order = params.order ?: 'desc'

我试图使用Grails命令对象来过滤动作参数。但如果URL中不存在该参数,我想设置一个默认值

class ListCommand {

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

}

def list(ListCommand cmd) {
    println cmd.order
}
我认为行为将与创建域对象时相同。我不想像这样处理操作中的每个参数:

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

我认为您不能为命令对象字段设置默认值

我建议您创建一个服务,在绑定参数之前使用默认值初始化命令对象:

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'
    }
}

如果始终使用此类操作声明:

def list(ListCommand cmd) { ... }

你可以试试这个:

class ListCommand {
    String order
    String sort

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

因为在这些操作定义中,validate()方法总是调用命令对象。

这将是理想的,但beforeValidate()方法似乎不是为命令对象调用的
class ListCommand {
    String order
    String sort

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