我正在尝试使用Grails命令对象来过滤操作参数。但是如果URL中没有参数,我想设置一个默认值。
class ListCommand {
String order = 'desc'
String sort = 'startDate'
}
def list(ListCommand cmd) {
println cmd.order
}
我认为行为与创建域对象的行为相同。我不想处理动作中的每个参数,如:
cmd.order = params.order ?: 'desc'
答案 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'
}
}