grails

2012-07-20 21 views
6

में कार्रवाई बटन का उपयोग करके पैरा को कैसे पास किया जाए, जिसमें बटन के साथ टरबल हो रहा है। मेरे पास कई बीटीएन हैं जिन्हें मैं अपने पैरामीटर को जानना चाहता हूं। grails ट्यूटोरियल में यह कहना है कि वह इस तरह होना चाहिए:grails

<g:actionSubmit action="action" value="${message(code: 'default.button.edit.label', default: 'Edit')}" params="['actionTaken':editPhone]"/> 

मैं remotelink, submitButton, submitToRemote टैग का उपयोग करने की कोशिश की, लेकिन कोई भी काम करता है। मैं हमेशा अशक्त मिल जब मैं अपने नियंत्रक में यह पार्स करने का प्रयास करें:

def action= 
    { 
     def actionTaken = params.actionTaken 
     def employeeId= params.employeeId 

     MySession session = MySession.getMySession(request, params.employeeId) 
     profileInstance = session.profileInstance 

     switch(actionTaken) 
     { 
      case "editPhone" : 
       isEditPhone=true 
       break 

      case "editEmail" : 
       isEditEmail=true 
       break 
     } 
     render(view:"profile", model:[profileInstance:session.profileInstance, isEditPhone:isEditPhone, isEditEmail:isEditEmail]) 
    } 

मैं क्या याद आ रही है? क्या मेरा पैरा कोड गलत है? क्या पार्सिंग पैराम्स में मेरा कोड गलत है? यह सिर्फ मुझे प्रगति के बिना सर्कल में मिलता है। मदद। धन्यवाद।

+0

आप की कोशिश की है ** <छ: actionSubmit कार्रवाई = "कार्रवाई" value = "$ {संदेश (कोड: 'default.button.edit.label', डिफ़ॉल्ट: 'संपादित करें', पैराम्स: ['actionTaken': editPhone])} "/> **। हो सकता है कि मैं पैराम्स विशेषता पर {} भूल गया, अगर यह काम नहीं करता है तो उन्हें ** [{}] ** या ** {[]} ** डालने का प्रयास करें ** मैं अभी यह याद नहीं करता कि यह कैसा था। Sry – axierjhtjz

उत्तर

7

Grails documentationparams को actionSubmit द्वारा स्वीकार किए गए गुणों में से एक के रूप में सूचीबद्ध नहीं करता है।

def editPhone = { forward(action:'action', params:[actionTaken: 'editPhone'])} 
def editEmail = { forward(action:'action', params:[actionTaken: 'editEmail'])} 

आप कर सकते हैं भी बस सिर्फ कोड पूरी तरह से अलग तर्क हैं:

यह शोषण क्या है कि टैग वास्तव में करता है के द्वारा नियंत्रक में अपने पैरामीटर सूची में मूल्य आप चाहते हैं सुई संभव है editPhone और editEmail क्रियाओं में यदि यह आपके कोड क्लीनर बनाता है।

अपडेट किया गया देखें कोड:

<g:actionSubmit action="editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" /> 
4

params विशेषता एक नक्शा है, जहां कुंजी एक तार इलाज कर रहे हैं लेकिन मूल्यों अभिव्यक्ति के रूप में इलाज कर रहे हैं के रूप में पार्स किया जाता है। इसलिए

params="['actionTaken':editPhone]" 

actionTaken नामित जीएसपी मॉडल में editPhone नामित चर से मूल्य के लिए कुंजी निर्धारित करने की कोशिश कर रहा है। चूंकि ऐसा कोई वैरिएबल नहीं है जिसे आप शून्य कर रहे हैं। तो ठीक उद्धरण स्थानांतरित करने के लिए है:

params="[actionTaken:'editPhone']" 

जो स्ट्रिंग "editPhone" के लिए मूल्य तय करेंगे।

+2

असल में, मैंने पहले ही पोस्ट किया था और अभी भी शून्य से पहले मैंने ऐसा किया था। :( – user742102

+0

यह grails 2.0 –

0

मैं सिर्फ एक समान समस्या (मैं एक एक आईडी के साथ एक साथ हटाने के प्रस्तुत करने के लिए आवश्यक) था और प्रस्तुत-आदानों के लिए एचटीएमएल 5 के "formaction" विशेषता का उपयोग एक समाधान मिल गया। उन्हें एक मान दिया जा सकता है जिसमें नियंत्रक, क्रिया, अतिरिक्त पैरामीटर इत्यादि शामिल हो सकते हैं।

सामान्य में, सबमिट बटन पर पैरामीटर जोड़ने के लिए जैसे किसी फॉर्म पर किसी विशिष्ट उप-ऑब्जेक्ट का संपादन दिखता है इस तरह:

<input type="submit" formaction="/<controller>/<action>/<id>?additionalParam1=...&additionalParam2=..." value="Action" > 

और अपने उदाहरण में:

<input type="submit" formaction="action?actionTaken=editPhone" value="${message(code: 'default.button.edit.label', default: 'Edit')}" > 
2

तुम भी

का उपयोग कर बाद डेटा अंदर पैरामीटर गुजर सकता है

फॉर्म के अंदर। फिर यह पैराम चर के माध्यम से भी सुलभ है। यह मेरे लिए काम करता है।

+0

के लिए काम नहीं करता है यह सही उत्तर imho है। आपको याद रखना होगा कि का संदर्भ एक रूप में है, और यह फ़ॉर्म सूचीबद्ध कार्रवाई में सबमिट किया जाएगा टैग। – nby

0

मेरी स्थिति में, मेरे पास एक तालिका के प्रत्येक पंक्ति (यानी डेटा तालिका संपादन बटन) पर कई क्रियाओं के साथ एक एकल तत्व तत्व था। पूरे फॉर्म डेटा को भेजना महत्वपूर्ण था इसलिए मैं केवल लिंक का उपयोग नहीं कर सका। पैरामीटर इंजेक्ट करने के लिए मुझे सबसे तेज़ तरीका जावास्क्रिप्ट के साथ था। आदर्श नहीं है, लेकिन यह काम करता है:

function injectHiddenField(name, value) { 
    var control = $("input[type=hidden][name='" + name + "']"); 
    if (control.size() == 0) { 
     console.log(name + " not found; adding..."); 
     control = $("<input type=\"hidden\" id=\"" + name + "\" name=\"" + name + "\">"); 
     $("form").append(control); 
    } 
    control.val(value); 
} 

आपका बटन इस तरह दिख सकता:

<g:each in="${objects}" var="object"> 
    ... 
    <g:actionSubmit value="edit" action="anotherAction" 
        onclick="injectHiddenField('myfield', ${object.id})"/> 
</g:each> 

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

  • कोई संबंधित समस्या नहीं^_^