Grails命令对象默认值

时间:2012-12-14 11:44:03

标签: grails

我正在尝试使用Grails命令对象来过滤操作参数。但是如果URL中没有参数,我想设置一个默认值。

class ListCommand {

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

}

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

我认为行为与创建域对象的行为相同。我不想处理动作中的每个参数,如:

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

2 个答案:

答案 0 :(得分:1)

如果您总是使用此类操作声明:

def list(ListCommand cmd) { ... }

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

你可以试试这个:

class ListCommand {
    String order
    String sort

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

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

答案 1 :(得分:0)

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

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

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