Grails में ऑब्जेक्ट को ऑर्डर करने की तिथि बाँधना




binding command-objects (2)

मेरे पास एक तिथि है (एक स्ट्रिंग के रूप में) प्रस्तुत की जा रही है मैं इसे एक आदेश ऑब्जेक्ट में मैप करना चाहता हूं। मैंने लगभग थोड़ा सा देखा है और कोई वास्तविक स्रोत नहीं मिला है कि इस मैपिंग को किसी कमान वस्तु के भीतर कैसे करें।

अगर मैं यह नियंत्रक में करना चाहता था तो मैं केवल निम्नलिखित कार्य कर सकता था, हालांकि यह मुझे आसानी से मेरे आदेश ऑब्जेक्ट में मैप करने की अनुमति नहीं देता है।

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

मेरे आदेश ऑब्जेक्ट के लिए, सबसे निकटतम मैं प्राप्त करने में सक्षम हूं, डेट ऑब्जेक्ट के लिए गेस्टेटर और सेटर को ओवरराइड करना है। दोनों को ओवरराइड करने की आवश्यकता है या नहीं, सेटर का उपयोग नहीं किया गया है। यह मैंने पहली बार करने की कोशिश की है (तिथि करने के लिए स्ट्रिंग सेट, लेकिन तिथि प्राप्त करें)। तो यह सेटर का उपयोग नहीं करता है:

@grails.validation.Validateable
class TaskCreateCommand {

    Date startDate


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

}

यह किसी भी रनटाइम की समस्या नहीं देता है, लेकिन बेकार है क्योंकि मैं वास्तविक दिनांक ऑब्जेक्ट को निकाल नहीं सकता।

@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 कमान ऑब्जेक्ट गुणों के लिए अनुरोध मापदंडों को बाइंड करने का प्रयास करता है, तो आपके कस्टम प्रारूप की कोशिश की जाएगी जब स्ट्रिंग को अनुरोध पैरामीटर में पार्स करना होगा।

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

आपके कंसोल पर


सह-संयोगवश मैं आज भी इसी समस्या को देख रहा था, और @ डॉन से इस जवाब का अनुसरण किया। मैं कमान ऑब्जेक्ट पर ठीक से एक तिथि बाँध रहा था

@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