2013-06-21 23 views
7

我有一個日期(作爲字符串)被提交。我想將其映射到一個命令對象。我已經環顧四周,發現沒有很好的資源來說明如何在命令對象內將這種映射映射到真正的日期。將日期綁定到Grails中的命令對象

如果我要在控制器本身執行此操作,我可以執行以下操作,但這不允許我輕鬆映射到命令對象中。

def endDate = params.date('endDate', 'MM/dd/yyyy') 

對於我的命令對象,我能夠得到的最接近的是覆蓋日期對象的getter和setter。兩者都需要重寫,否則setter不會被使用。這是我第一次嘗試(將字符串設置爲日期,但獲取日期)。因此,這不使用二傳手:

@grails.validation.Validateable 
class TaskCreateCommand { 

    Date startDate 


    public void setStartDate(String dateStr){ 
     this.start = Date.parse('MM/dd/yyyy', dateStr) 
    } 

} 

這不會給任何運行時的問題,但也沒用,因爲我不能拉出實際的Date對象。

@grails.validation.Validateable 
class TaskCreateCommand { 

    Date startDate 


    public void setStartDate(String dateStr){ 
     this.start = Date.parse('MM/dd/yyyy', dateStr) 
    } 

    public String getStartDate(){ 
     return start.toString() 
    } 
} 
+0

答案有幫助嗎? – dmahapatro

回答

6

同時我今天也在看同樣的問題,並且跟着@Don的this回答。我能夠正確地將日期綁定到命令對象。

@Validateable 
class BookCommand { 
    String name 
    Date pubDate 
    Integer pages 
} 

//Controller 
def index(BookCommand cmd) { 
     println cmd.name 
     println cmd.pages 
     println cmd.pubDate 

     render "Done" 
    } 

//src/groovy 
class CustomDateEditorRegistrar implements PropertyEditorRegistrar { 
    public void registerCustomEditors(PropertyEditorRegistry registry) { 
     String dateFormat = 'yyyy/MM/dd' 
     registry.registerCustomEditor(Date, new CustomDateEditor(new SimpleDateFormat(dateFormat), true)) 
    } 
} 

//URL 
http://localhost:8080/poc_commandObject/book?name=Test&pages=10&pubDate=2012/11/11 

//Println 
Test 
10 
Sun Nov 11 00:00:00 EST 2012 
+0

Dhiraj,如果您創建多個'CustomDateEditorRegistrar',Grails如何選擇一個? –

12

如果你使用Grails 2.3或更高版本,您可以添加多個自定義日期格式數據在Config.groovy中結合

grails.databinding.dateFormats = ["MM/dd/yyyy"] 

然後當Grails的嘗試綁定請求參數到命令對象屬性,你的自定義格式將在請求參數中解析日期字符串時被嘗試。

class MyController { 
    def myAction(MyCommandObject cmd) { 
     println cmd.date 
     println cmd.date.class 
    } 
} 

class MyCommandObject { 
    Date date 
} 

然後當你擊中例如。

http://localhost:8080/myController/myAction?date=12/13/2013 

你應該看到類似 - 在控制檯上>

Fri Dec 13 00:00:00 EST 2013 
class java.util.Date 

+0

在2.3之前的Grails版本中,處理此問題的最佳方法是什麼? –

+0

你將不得不註冊自己的自定義日期編輯器,這是一個更多的工作。查看詳細信息http://stackoverflow.com/questions/2871977/binding-a-grails-date-from-params-in-a-controller。它比這裏接受的答案更多地擴展瞭如何做到這一點。 – AndrewW

+0

最好從StringToDate創建一個ValueConverter,像這樣:http://stackoverflow.com/a/29552305/568179(它是區域意識;)) – mpccolorado

相關問題