簡體   English   中英

將日期綁定到Grails中的命令對象

[英]bind date to command object in Grails

我有一個提交的日期(作為字符串)。 我想將它映射到命令對象。 我已經看了很多,並沒有發現如何在命令對象中實現這種映射到實際日期的很好的資源。

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

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

對於我的命令對象,我能夠得到的最接近的是覆蓋日期對象的getter和setter。 兩者都需要被覆蓋,否則不使用setter。 這是我第一次嘗試(將String設置為Date,但獲取Date)。 所以這不使用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()
    }
}

如果您使用的是Grails 2.3或更高版本,則可以在Config.groovy中為數據綁定添加多種自定義日期格式

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

然后,當Grails嘗試將請求參數綁定到Command對象屬性時,將在解析請求參數中的日期字符串時嘗試自定義格式,例如。

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

class MyCommandObject {
    Date date
}

然后當你擊中eg。

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

你應該看到類似的東西 - >

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

在你的控制台上。

共順便我今天在看同樣的問題,其次從@Don答案。 我能夠正確地將日期綁定到命令對象。

@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

如果使用正確的@BindingFormat,我可以為我工作。 例:

import grails.databinding.BindingFormat
class DateRangeFilter {
    String fieldName
    @BindingFormat('yyyy-MM-dd')
    Date from
    @BindingFormat('yyyy-MM-dd')
    Date to 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM