2012-11-24 15 views
5

के बाद ऑनक्लिक फ़ंक्शन की प्रक्रिया मैं एक फॉर्म (AJAX कॉल) सबमिट करने के बाद चुनिंदा घटक आईडी चुनने और ध्यान केंद्रित करने का प्रयास कर रहा हूं।AJAX कॉल <f:ajax>

<script> 
var myFunc = function() { 
    document.getElementById('form:#{bean.componentId}').focus(); 
    document.getElementById('form:#{bean.componentId}').select(); 
}; 

$(document).ready(function() { 
    myFunc(); 
}); 
</script> 

<h:form id="form"> 
    <h:commandButton action="#{bean.save}" onclick="return myFunc();" ...> 
    <f:ajax execute="@form" render="@form"/> 
    </h:commandButton> 
    ... 
</h:form> 

यह समाधान काम कर रहा है, लेकिन समस्या यह है कि <f:ajax>onclick के बाद कहा जाता है, है, इसलिए प्रपत्र घटक चयन के बाद प्रदान की गई है, और ध्यान को मंजूरी दे दी है।

फ़ॉर्म को प्रस्तुत करने के बाद मैं अपने फ़ंक्शन को कैसे कॉल कर सकता हूं?

अद्यतन: (मैं उदाहरण के लिए कोशिश की है)

  • => ताज़ा पेज
  • की ओर जाता है onclick विशेषता
  • अगले के रूप में onevent="myFunc()"f:ajax => समान व्यवहार करने के लिए जोड़ onevent="myFunc();"f:ajax में जोड़ें f:ajaxonevent एटीआर के साथ। => अब भी वही

Update2 (यह कैसे काम करता है चाहिए):

  • प्रस्तुत (पर निर्भर बटन ajax बुलाया
  • प्रपत्र जरूरत
  • उपयुक्त क्षेत्र के रूप में साफ किया जाता है ध्यान केन्द्रित करता है कुछ उपयोगकर्ता चुनिंदा कारक)
+0

वहाँ एक "oncomplete" primefaces CommandButton में और richfaces CommandButton में -attribut है। – stg

उत्तर

24

onevent हैंडलर वास्तव में आविष्कार किया जाएगा तीन बार ठीक किया गया और इसे फ़ंक्शन नाम पर इंगित करना चाहिए, न कि फ़ंक्शन स्वयं। AJAX अनुरोध भेजने से एक बार, AJAX प्रतिक्रिया के एक बार आने के बाद और एक बार जब HTML DOM सफलतापूर्वक अपडेट किया गया था। आपको इसके लिए दिए गए डेटा तर्क की status संपत्ति की जांच करनी चाहिए।

function listener(data) { 
    var status = data.status; // Can be "begin", "complete" or "success". 

    switch (status) { 
     case "begin": // Before the ajax request is sent. 
      // ... 
      break; 

     case "complete": // After the ajax response is arrived. 
      // ... 
      break; 

     case "success": // After update of HTML DOM based on ajax response.. 
      // ... 
      break; 
    } 
} 

अपने विशेष मामले में, आप इस प्रकार केवल एक जांच जोड़ने के लिए स्थिति है यदि success की जरूरत है।

function myFunc(data) { 
    if (data.status == "success") { 
     var element = document.getElementById('form:#{bean.componentId}'); 
     element.focus(); 
     element.select(); 
    } 
} 

और तुम इसके नाम से समारोह को संदर्भित करने की जरूरत है:

<f:ajax ... onevent="myFunc" /> 
+0

धन्यवाद। लेकिन यह अजीब बात है, घटक आईडी अभी भी वही है, यह हमेशा एक ही घटक का चयन करता है .. – gaffcz

+1

यह एक अलग समस्या है। ईएल वेब ब्राउजर में एचटीएमएल/जेएस के साथ वेबसर्वर पर जेएसएफ के साथ चलता है। जेनरेट किए गए एचटीएमएल आउटपुट को देखें। आप देखेंगे कि जेएस फ़ंक्शन में अब '# {}' नहीं है। – BalusC

+0

आह (समझ में नहीं आता) :-) घटक आईडी बीन में inicialized जैसे रहता है .. क्या उस समस्या का कुछ समाधान है? मैं सर्कल में कताई कर रहा हूं :( – gaffcz

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