2012-02-06 12 views
5

जेएसएफ 2 में, एकाधिक फॉर्म सबमिट करने के लिए कोई तरीका है (उपयोगकर्ता क्लिक बटन कई बार सबमिट करते हैं)? अब हम सर्वरएकाधिक फॉर्म सबमिशन से बचें

java.lang.IllegalStateException: Response already committed 
java.lang.IllegalStateException: Response already committed 
javax.faces.FacesException: socket write error: Connection aborted by peer 
+0

java.net.SocketException: सॉकेट लेखन त्रुटि: सहकर्मी – user684434

उत्तर

3

में नीचे दिए गए अपवाद प्राप्त कर रहे हैं यह इस बात पर निर्भर करता है कि आप फ़ॉर्म को सबमिट कैसे कर रहे हैं। यदि आप अजाक्स द्वारा सबमिट करने के लिए <f:ajax> या किसी अन्य अजाक्स आधारित टैग का उपयोग कर रहे हैं, तो आपकी सबसे अच्छी शर्त jsf.ajax.addOnEvent() का उपयोग करने के लिए एक फ़ंक्शन जोड़ने के लिए है जो अजाक्स अनुरोध भेजे जाने के बाद बटन को अक्षम करता है और इसे फिर से सक्षम करता है अजाक्स प्रतिक्रिया पुनर्प्राप्त की गई है।

उदा। निम्नानुसार, जेएसएफ अजाक्स स्क्रिप्ट के बाद आप शामिल हैं, उदाहरण के लिए <script> या <h:outputScript> के अंदर .js फ़ाइल <h:head> में संदर्भित करता है।

jsf.ajax.addOnEvent(function(data) { 
    if (data.source.type != "submit") { 
     return; // Ignore anything else than input type="submit". 
    } 

    switch (data.status) { 
     case "begin": 
      data.source.disabled = true; // Disable input type="submit". 
      break; 
     case "complete": 
      data.source.disabled = false; // Re-enable input type="submit". 
      break; 
    }  
}); 

आप अजाक्स का उपयोग सबमिट करते हैं, तो तरीकों में से एक onclick में एक setTimeout() समारोह जो क्लिक करने के बाद बटन कुछ एमएस अक्षम कर देता है में फेंक करने के लिए है प्रदर्शन करने के लिए नहीं कर रहे हैं।

असल में,

<h:commandButton 
    id="foo" 
    value="submit" 
    action="#{bean.submit}" 
    onclick="setTimeout('document.getElementById(\'' + this.id + '\').disabled=true;', 50);" 
/> 

setTimeout(), अनिवार्य है, क्योंकि जब आप इसे तुरंत अक्षम है, तो बटन के name=value जोड़ी अनुरोध जो कारण होगा JSF पहचान करने में असमर्थ होने के लिए साथ-साथ नहीं भेजा जाएगा निष्पादित करने के लिए action। आप निश्चित रूप से इसे कुछ डोम तैयार या विंडो ऑनलोड फ़ंक्शन पर रीफैक्टर कर सकते हैं जो सभी सबमिट बटनों के लिए इसे लागू करता है (jQuery इसमें बहुत मददगार होगा)।

+0

द्वारा निरस्त किया गया कनेक्शन आप कुछ संकेत दिए गए या DOM के लिए तैयार या विंडो ऑनलोड समारोह के रूप में यह करने के लिए लिंक मत करो। – user684434

+0

क्षमा करें, इसे डीओएम तैयार या विंडो अधिभार के दौरान निष्पादित करने की आवश्यकता नहीं है। बस इसे '

0

आप पृष्ठ पर एक अक्षम बटन जोड़ सकते हैं जो कुछ भी नहीं करता है और सबमिट बटन पर क्लिक होने पर इसे दिखाता है।

<div id="disabled" style="display:none;"> 
    <span class="disabled-button"/> 
</div> 
<div id="enabled" style="display:block;"> 
    <span class="enabled-button"> 
      <h:commandLink id="submit"/> 
    </span> 
</div> 


$('#submit').live("click", function() { 
$('#enabled').hide(); 
$('#disabled').show(); 
}); 
संबंधित मुद्दे