2012-12-14 52 views
1

我正在嘗試使用Grails命令對象來篩選操作參數。但是如果該參數不在URL中,我想設置一個默認值。Grails命令對象默認值

class ListCommand { 

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

} 

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

我以爲行爲會和我創建域對象一樣。我不想處理動作中的每個參數,例如:

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

回答

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

,如果你總是用這樣的行動聲明:

def list(ListCommand cmd) { ... } 

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

你可以試試這個:

class ListCommand { 
    String order 
    String sort 

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

因爲在那些動作定義中,validate()方法總是調用命令對象。

+0

這將是理想的,但不調用beforeValidate()方法的命令對象,它似乎 – Dopele

+0

標記爲@ grails.validation.Validatable註釋 – jenk