java - JSF form does not get submitted when form is disabled by JavaScript -


यह सबमिट करें बटन है:

  & lt; h: commandButton actionListener = "# { RegBean.findReg} "action =" # {regBean.navigate} "मान =" खोज "/ & gt;  

यह फ़ॉर्म है:

  & lt; h: form onsubmit = "this.disabled = true; व्यस्तप्रक्रिया (); रिटर्न सत्य;" & gt;  

सबमिट बटन दबाया जाता है, तो अनुरोध पर कार्रवाई की जाती है, जब तक पृष्ठ एक "व्यस्त" आइकन दिखाता है। समस्या यह है कि फ़ॉर्म कभी भी नहीं जमा होता है और अनुरोध बैकएंड तक कभी नहीं पहुंचता है। हालांकि, अगर मैं इसके बजाय "अक्षम" कॉल को लेता हूं:

  & lt; h: फ़ॉर्म ऑनसबमिट = "व्यस्तप्रक्रिया (); वापस लौटें;" & gt;  

तब सब कुछ काम करता है किसी भी विचार?

JSF नाम-मान की उपस्थिति पर निर्भर करता है सर्वर पक्ष में विशिष्ट कार्रवाई यदि आप फ़ॉर्म सबमिट करने से पहले फॉर्म को कम करते हैं (कम से कम, बटन), तो अनुरोध पैरामीटर मानचित्र में कोई जानकारी उपलब्ध नहीं होगी और JSF कोई भी कार्रवाई नहीं करेगा।

आपकी सबसे अच्छी शर्त एक टाइमआउट जिसमें आप सबमिट करने के बाद बटन को 50ms के बारे में अक्षम कर सकते हैं। उदा।

  onsubmit = "setTimeout (फ़ंक्शन () {document.getElementById ('formId: buttonId')। अक्षम = सच;}, 50); व्यस्तप्रक्रिया ();"  

स्पष्ट रिटर्न सच; अंत में सुपरफ़्लस के रास्ते से होता है इसके अलावा, एचटीएमएल फॉर्म तत्व को निष्क्रिय करना सीधे काम नहीं कर रहा है क्योंकि इसमें अक्षम विशेषता नहीं है, आप बटन को अक्षम करना चाहते हैं (और यदि आवश्यक हो तो अन्य इनपुट तत्व भी)

यहां कुछ सुधार हैं:

  & lt; h: फ़ॉर्म ऑनसबमिट = "व्यस्तप्रक्रिया (यह);" & gt;  

  फ़ंक्शन व्यस्तप्रक्रिया (फ़ॉर्म) {setTimeout (फ़ंक्शन () (के लिए (var i = 0; i & lt; form.elements.length; I ++) {form.elements [i] .disabled = true;}}, 50); // यहां आपके कोड का शेष भाग। }  

अपडेट : क्योंकि मुझे आश्चर्य है कि आपने कहा था कि यह "काम करता है", मैंने फ़ॉर्म के अक्षम विशेषता का परीक्षण किया है विभिन्न ब्राउज़रों, यह केवल MSIE (आश्चर्यजनक ..) में काम करता है, लेकिन अन्य (वास्तविक) ब्राउज़र में नहीं है आप ब्राउज़र-निर्भर नहीं बनना चाहते हैं, इसलिए इसे भूल जाएं और फ़ॉर्म के व्यक्तिगत तत्वों को अक्षम करने के साथ आगे बढ़ें।


Comments