2009-09-17 8 views
6

में गतिशील रूप मैं वसंत रूपों का उपयोग करके एक गतिशील रूप बनाने की कोशिश कर रहा हूं। असल में, फॉर्म सीखने की गतिविधि का एक शीर्षक प्राप्त करता है और फिर नीचे एक बटन है जो कहता है, "एक और सीखना गतिविधि जोड़ें"। यह उपयोगकर्ता को एक और सीखने की गतिविधि जोड़ने के लिए संभव बनाता है। मैं चाहता हूं कि वह जितना चाहें उतना जोड़ सके।वसंत

मैंने पहले यह कोशिश नहीं की है कि मुझे पहले समाधान के साथ त्रुटियों का सामना करना पड़ा।

<script language="javascript"> 
fields = 0; 
function addInput() { 
     document.getElementById('text').innerHTML += "<form:input path='activity[fields++].activity'/><br />"; 
} 

<div id="text"> 
    <form:form commandName="course"> 
    Learning Activity 1 
    <form:input path="activity[0].activity"/> 
    <input type="button" value="add activity" onclick="addInput()"/> 
    <br/><br/> 
    <input type="submit"/> 
    </form:form> 
    <br/><br/> 
</div> 

उत्तर

7

आप जावास्क्रिप्ट के भीतर < form:input> का उपयोग नहीं कर सकते क्योंकि सर्वर-साइड पर चलने वाला एक jsp टैग है।

हालांकि, स्प्रिंग कमांड ऑब्जेक्ट में किसी HTML इनपुट को किसी फ़ील्ड से कैसे बाध्य किया जाता है, इसके बारे में जादुई कुछ भी नहीं है; यह सिर्फ नाम पर आधारित है। तो अपने जावास्क्रिप्ट में, एक नया <input type="text" name="activity[1].activity"> जोड़ें (उदाहरण के लिए - जाहिर है आप इंडेक्स में वृद्धि करेंगे)।

एक और विकल्प जिसे मैंने अधिक जटिल नियंत्रणों के लिए उपयोग किया है, मौजूदा नियंत्रण के HTML को पकड़ना है (जिसे स्प्रिंग फॉर्म: इनपुट टैग का उपयोग करके बनाया गया था) और इसे क्लोन करें, इंडेक्स को बढ़ी हुई संख्या के साथ बदलना। यदि आप jQuery का उपयोग करते हैं तो यह बहुत आसान हो जाता है।

संपादित करने के लिए संपादित: एक समस्या जो आपको समस्याएं पैदा कर सकती है: आप अपने बाहरी इनपुट बॉक्स ("टेक्स्ट") के अंत में अपना नया इनपुट बॉक्स जोड़ रहे हैं, जिसका अर्थ यह है कि यह फ़ॉर्म टैग के अंदर नहीं है। वह काम नहीं करेगा।

+0

मैंने ऐसा करने की कोशिश की लेकिन जेनरेट किए गए फॉर्म के मान कमांड क्लास से बंधे नहीं हैं। केवल वसंत रूप में जो मैंने स्पष्ट रूप से सेट किया है वह बाध्य है उदाहरण के लिए ऊपर दिए गए कोड में: Jeune

+0

"एक समस्या जो आपको समस्याएं दे सकती है: आप अपना जोड़ रहे हैं आपके बाहरी div ("text") के अंत में नया इनपुट बॉक्स, जिसका अर्थ है कि यह फ़ॉर्म टैग के अंदर नहीं है। यह काम नहीं करेगा। " मैंने इसे पहले से संबोधित किया है, मैंने फॉर्म टैग के भीतर किसी अन्य div के अंदर नए इनपुट बॉक्स को जोड़ा है, फिर भी संलग्न इनपुट बॉक्स बाध्य नहीं हैं। – Jeune

+1

क्या आप अपने संलग्न इनपुट बॉक्स का उदाहरण दे सकते हैं? मैंने यह दृष्टिकोण करने के लिए इस दृष्टिकोण का उपयोग किया है और यह काम करता है। "गतिविधि [1] .activity" नामक एक इनपुट बॉक्स को आपकी गतिविधि सूची में दूसरे आइटम से जोड़ना चाहिए (मान लें कि इसमें "गतिविधि" फ़ील्ड है), आदि –

1

<form:input> एक JSP टैग है: मैं वास्तव में एक लग रहा है क्या मैं एक त्रुटि उत्पन्न होगा किया था, लेकिन अभी घर ड्राइव कि मैं क्या करने की कोशिश कर रहा हूँ है, यहाँ कोड है? यदि ऐसा है, तो DOM को <form:input> नोड्स जोड़ने के लिए क्लाइंट-साइड जावास्क्रिप्ट का कोई प्रभाव नहीं पड़ेगा - चूंकि सर्वर-साइड जेएसपी इंजन उनको व्याख्या नहीं कर रहा है।

आपकी जावास्क्रिप्ट को कच्चे HTML और DOM के साथ काम करने की आवश्यकता है, जैसे <input> तत्व जोड़ना।

+0

हाँ यह वसंत के लिए एक jsp टैग है। मैंने केवल अनुरोध से पैरामीटर प्राप्त करके पहले ही फॉर्म को मजबूर कर दिया है। हालांकि, मैं फॉर्म फ़ील्ड को कमांड क्लास में बांधने के लिए स्प्रिंग की सरलफॉर्म कंट्रोलर क्षमता का उपयोग करना चाहता था। मैं बस सोच रहा था कि मेरी स्थिति में ऐसा करने का कोई तरीका है या नहीं। चीयर्स! – Jeune