Grails

2013-06-21 8 views
7

में ऑब्जेक्ट कमांड ऑब्जेक्ट की बाइंड तिथि मेरे पास एक तिथि (एक स्ट्रिंग के रूप में) सबमिट की जा रही है। मैं इसे कमांड ऑब्जेक्ट में मैप करना चाहता हूं। मैंने काफी हद तक देखा है और कमांड ऑब्जेक्ट में वास्तविक तिथि पर इस मैपिंग को कैसे करें इस पर कोई अच्छा संसाधन नहीं मिला है।Grails

अगर मैं नियंत्रक ही मैं सिर्फ निम्नलिखित कर सकता है में यह करने के लिए थे, लेकिन यह मेरे आसानी से अपने आदेश वस्तु में मैप करने के लिए अनुमति नहीं है।

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() 
    } 
} 
+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

धीराज, यदि आप एकाधिक 'कस्टमडेट एडिटर रजिस्ट्रार' बनाते हैं तो 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 
} 

तब जब आप उदाहरण मारा। अपने कंसोल पर>

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

-

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

आप की तरह कुछ देखना चाहिए।

+0

2.3 से पहले Grails संस्करणों के लिए इसे संभालने का सबसे अच्छा तरीका क्या होगा? –

+0

आपको अपना खुद का कस्टम डेट एडिटर पंजीकृत करना होगा जो थोड़ा और काम है। विवरण के लिए http://stackoverflow.com/questions/2871977/binding-a-grails-date-from-params-in-a-controller देखें। यह यहां स्वीकृत उत्तर से इसे कैसे करें, इस पर कुछ और विस्तार करता है। – AndrewW

+0

स्ट्रिंगटॉडेट से वैल्यू कनवर्टर बनाना बेहतर है: http://stackoverflow.com/a/29552305/568179 (और यह लोकेल जागरूक है;)) – mpccolorado