2013-02-01 10 views
6

मेरे पास एक डोमेन है, उस डोमेन में 25 से अधिक सदस्य हैं। यह सदस्य मूल्य एक रूप से आएगा। लेकिन उन बहुत अधिक क्षेत्रों को भरना बुरा लगता है। तो मैंने अलग-अलग चरणों में इनपुट फॉर्म को विभाजित करने का विचार किया।दृढ़ता के लिए अलग-अलग क्षेत्रों के साथ grails सेवा

मैंने फॉर्मऑब्जेक्ट नामक एक कक्षा बनाई है जिसमें सभी इनपुट आवश्यक फ़ील्ड हैं। समस्या इस पृष्ठ को पृष्ठों के बीच पास करने का कोई तरीका नहीं है।

मैं सोच रहा था कि सत्र के दायरे के साथ शायद एक सेवा मुझे फॉर्मऑब्जेक्ट का संदर्भ रखने की अनुमति देगी और इसे फिर से प्राप्त करने के लिए सेवा से एक विधि कॉल करेगी।

<g:set var="formService" value="${new FormService()}" /> 

class FormService{ 
    static transactional = false 
    static scope = "session" 

    FormObject myObject = new FormObject() 

    def resetForm(){ 
     myObject=new FormObject() 
    } 

    def getForm(){ 
     return myObject 
    } 
} 

और

<g:set var="myForm" value="${formService.getForm()}" /> 

तरह जीएसपी में इस्तेमाल किया है कि हालांकि डेटा पृष्ठों के बीच मौजूद नहीं होता।

यह तब भी जारी रहता है जब मैं myObject संपत्ति को स्थैतिक मानता हूं, लेकिन मुझे चिंता है कि जब यह उत्पादन हिट करता है, तो myObject सभी उपयोगकर्ताओं में साझा किया जाएगा।

क्या कोई यह पुष्टि कर सकता है कि क्या होगा यदि मैं इसे स्थिर बना देता? क्या प्रत्येक सत्र में स्थैतिक फॉर्म ऑब्जेक्ट होगा या क्या केवल एक स्थिर फॉर्म ऑब्जेक्ट होगा?

उत्तर

2

मैं समाधान मिल गया ....

पहले दृष्टिकोण, करीब है, सिवाय इसके कि आप एक वसंत सेम के रूप में यह हो रही का एक नया उदाहरण बना रहे हैं कि बजाय, तो तथ्य यह है कि यह सत्र-दायरे 'isn है खेल में नहीं आ रहा है। सामान्यतः यदि आपके पास वर्कफ़्लोज़ हैं जो दो से अधिक पृष्ठों तक फैले हैं, तो आपको वेबफ्लो को देखना चाहिए, लेकिन यह आपकी आवश्यकता से बड़ा समाधान हो सकता है।

मैं सेवा रैपर को छोड़ दूंगा और ऑब्जेक्ट को सत्र में संग्रहीत करूंगा। यहां जोखिम यह है कि यदि कुछ होता है और आप उन्हें हटा नहीं देते हैं तो आप ऑब्जेक्ट्स के साथ अपने सत्रों को प्रदूषित कर सकते हैं, इसलिए आपको इसे संभालना चाहिए।

पहले नियंत्रक कार्रवाई में यह सुनिश्चित कर लें वस्तु है:

def action1 = { 
    ... regular work 
    session.formObject = new FormObject() 
    // return model, e.g. 
    [foo: bar] 
} 

और GSPs में आप इसे

${session.formObject} 
+2

के रूप में काम करना चाहिए क्यों आप अपने प्रश्न का उत्तर दे रहे हैं जैसे कि आप किसी अन्य व्यक्ति से बात कर रहे हैं? जबरदस्त हंसी। – lucke84

+0

@ lucke84, यह प्रश्न महत्वपूर्ण डेवलपर के लिए ज्ञान के लिए महत्वपूर्ण और नया है। – sanghavi7

+0

यह एक अच्छी बात है कि आपने अपना समाधान साझा किया है, मैं बस सोच रहा हूं कि आपने "इसे इस तरह से करना है" के बजाय "मैंने इसे हल किया" क्यों नहीं कहा। – lucke84

1

उल्लेख कर सकते हैं मैं शायद एक और दृष्टिकोण लेने के लिए और के माध्यम से फार्म वस्तु प्रदान करेगा नियंत्रक के माध्यम से मॉडल - सभी दृढ़ता मुद्दों को नियंत्रक के माध्यम से भी किया जाएगा, ताकि आपका पहला दृष्टिकोण अपेक्षित कार्य करेगा ...

function showForm() { 
    render[view: 'view', model: [serviceForm: formService.form]] 
} 

function persistForm(MyCommand cmd) { 
    // check cmd for errors 
    if(cmd.hasErrors()) { 
    // return the MyCommand object for error yielding 
    render(view: 'view', model: [cmd: cmd]] 
    } 
    // persist cmd fields to formService.form object 
    formService.form.field = cmd.field 
} 

यह

संबंधित मुद्दे