दिलचस्प पोस्ट
पायथन में वैकल्पिक कर्ल यदि मेरे पास इकाई प्रबंधक हैं तो सत्र ऑब्जेक्ट कैसे प्राप्त कर सकते हैं I लंबित आशय के कई उदाहरण ठीक से एक सूची से एक पूर्णांक निकालें <पूर्णांक> मेरी वेबपैक बंडल.जेएस और विक्रेता.बंडल.जेएस इतनी अविश्वसनीय रूप से बड़ी क्यों हैं? ऊपर की दाईं ओर के एस्सी मूल्य क्या हैं? जाओ और सेट स्क्रीन संकल्प जावास्क्रिप्ट में एक PHP चर को पारित करने का सबसे अच्छा तरीका क्या है? उद्देश्य सी, उदाहरण सदस्यों के मेमोरी प्रबंधन कैसे पीडीओ के बाहर त्रुटि संदेश निचोड़? सी # में मैं डायरेक्ट्री आकार (निर्देशिका में फाइलें) कैसे प्राप्त करूं? एक पांडा में एक पंक्ति जोड़ें। डेटाफ़्रेम Android में गतिशील रूप से तालिका पंक्तियों को जोड़ना सी # में एक `फील्डफ` या` विधि 'ऑपरेटर क्यों नहीं है? : रेल मार्गों के रूप में। आरबी

प्रमाणीकरण त्रुटियों के बाद मैं PrimeFaces AJAX का उपयोग कर एक पाठ फ़ील्ड कैसे आबाद कर सकता हूं?

मेरा एक ऐसा दृश्य है जो स्वत: पूर्णता और जीएमएपी स्थानीयकरण के लिए अजाक्स आंशिक प्रसंस्करण करता है। मेरी बैकिंग बीन एक इकाई ऑब्जेक्ट "एड्रेस" को तत्काल देती है और यह ऑब्जेक्ट है कि फॉर्म के इनपुट का संदर्भ दिया गया है:

@ManagedBean(name="mybean") @SessionScoped public class Mybean implements Serializable { private Address address; private String fullAddress; private String center = "0,0"; .... public mybean() { address = new Address(); } ... public void handleAddressChange() { String c = ""; c = (address.getAddressLine1() != null) { c += address.getAddressLine1(); } c = (address.getAddressLine2() != null) { c += ", " + address.getAddressLine2(); } c = (address.getCity() != null) { c += ", " + address.getCity(); } c = (address.getState() != null) { c += ", " + address.getState(); } fullAddress = c; addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Full Address", fullAddress)); try { geocodeAddress(fullAddress); } catch (MalformedURLException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedEncodingException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } catch (ParserConfigurationException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } catch (SAXException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } catch (XPathExpressionException ex) { Logger.getLogger(Mybean.class.getName()).log(Level.SEVERE, null, ex); } } private void geocodeAddress(String address) throws MalformedURLException, UnsupportedEncodingException, IOException, ParserConfigurationException, SAXException, XPathExpressionException { // prepare a URL to the geocoder address = Normalizer.normalize(address, Normalizer.Form.NFD); address = address.replaceAll("[^\\p{ASCII}]", ""); URL url = new URL(GEOCODER_REQUEST_PREFIX_FOR_XML + "?address=" + URLEncoder.encode(address, "UTF-8") + "&sensor=false"); // prepare an HTTP connection to the geocoder HttpURLConnection conn = (HttpURLConnection) url.openConnection(); Document geocoderResultDocument = null; try { // open the connection and get results as InputSource. conn.connect(); InputSource geocoderResultInputSource = new InputSource(conn.getInputStream()); // read result and parse into XML Document geocoderResultDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(geocoderResultInputSource); } finally { conn.disconnect(); } // prepare XPath XPath xpath = XPathFactory.newInstance().newXPath(); // extract the result NodeList resultNodeList = null; // c) extract the coordinates of the first result resultNodeList = (NodeList) xpath.evaluate( "/GeocodeResponse/result[1]/geometry/location/*", geocoderResultDocument, XPathConstants.NODESET); String lat = ""; String lng = ""; for (int i = 0; i < resultNodeList.getLength(); ++i) { Node node = resultNodeList.item(i); if ("lat".equals(node.getNodeName())) { lat = node.getTextContent(); } if ("lng".equals(node.getNodeName())) { lng = node.getTextContent(); } } center = lat + "," + lng; } 

स्वत: पूर्णता और नक्शा AJAX अनुरोध सबमिट करें इससे पहले कि मैं सबमिट पर पूरा फ़ॉर्म संसाधित करता हूं। यदि सत्यापन विफल हो जाता है, तो अजाक्स अभी भी फ़ील्ड पूर्ण को छोड़कर ठीक काम करता हैअड्डे जो दृश्य में अपडेट करने में असमर्थ है, भले ही यह मान सही ढंग से बैकिंग सेम पर एजेक्स अनुरोध के बाद सेट किया गया हो।

 <h:outputLabel for="address1" value="#{label.addressLine1}"/> <p:inputText required="true" id="address1" value="#{mybean.address.addressLine1}"> <p:ajax update="latLng,fullAddress" listener="#{mybean.handleAddressChange}" process="@this"/> </p:inputText> <p:message for="address1"/> <h:outputLabel for="address2" value="#{label.addressLine2}"/> <p:inputText id="address2" value="#{mybean.address.addressLine2}" label="#{label.addressLine2}"> <f:validateBean disabled="#{true}" /> <p:ajax update="latLng,fullAddress" listener="#{mybean.handleAddressChange}" process="address1,@this"/> </p:inputText> <p:message for="address2"/> <h:outputLabel for="city" value="#{label.city}"/> <p:inputText required="true" id="city" value="#{mybean.address.city}" label="#{label.city}"> <p:ajax update="latLng,fullAddress" listener="#{mybean.handleAddressChange}" process="address1,address2,@this"/> </p:inputText> <p:message for="city"/> <h:outputLabel for="state" value="#{label.state}"/> <p:autoComplete id="state" value="#{mybean.address.state}" completeMethod="#{mybean.completeState}" selectListener="#{mybean.handleStateSelect}" onSelectUpdate="latLng,fullAddress,growl" required="true"> <p:ajax process="address1,address2,city,@this"/> </p:autoComplete> <p:message for="state"/> <h:outputLabel for="fullAddress" value="#{label.fullAddress}"/> <p:inputText id="fullAddress" value="#{mybean.fullAddress}" style="width: 300px;" label="#{label.fullAddress}"/> <p:commandButton value="#{label.locate}" process="@this,fullAddress" update="growl,latLng" actionListener="#{mybean.findOnMap}" id="findOnMap"/> <p:gmap id="latLng" center="#{mybean.center}" zoom="18" type="ROADMAP" style="width:600px;height:400px;margin-bottom:10px;" model="#{mybean.mapModel}" onPointClick="handlePointClick(event);" pointSelectListener="#{mybean.onPointSelect}" onPointSelectUpdate="growl" draggable="true" markerDragListener="#{mybean.onMarkerDrag}" onMarkerDragUpdate="growl" widgetVar="map"/> <p:commandButton id="register" value="#{label.register}" action="#{mybean.register}" ajax="false"/> 

अगर मैं पृष्ठ को रीफ्रेश करता हूं, तो सत्यापन त्रुटि संदेश गायब हो जाते हैं और अपेक्षित के रूप में एजेक्स पूर्ण एडेचर फ़ील्ड पूरा करता है

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

मुझे लगता है कि मुझे मान्यता राज्य के दौरान कुछ याद आ रही है, लेकिन मुझे पता नहीं है कि इसके साथ क्या गलत है। क्या कोई जानता है कि जेएसएफ जीवन चक्र कैसे डीबग करना है? कोई विचार?

Solutions Collecting From Web of "प्रमाणीकरण त्रुटियों के बाद मैं PrimeFaces AJAX का उपयोग कर एक पाठ फ़ील्ड कैसे आबाद कर सकता हूं?"

इस समस्या का कारण निम्नलिखित तथ्यों पर विचार करके समझा जा सकता है:

  • जब सत्यापन चरण के दौरान किसी विशेष इनपुट घटक के लिए JSF सत्यापन सफल होता है, तो प्रस्तुत मान null सेट होता है और मान्य मान को इनपुट घटक के स्थानीय मान के रूप में सेट किया जाता है।

  • जब सत्यापन चरण के दौरान किसी विशेष इनपुट घटक के लिए JSF सत्यापन विफल होता है, तो प्रस्तुत मूल्य इनपुट घटक में रखा जाता है।

  • जब सत्यापन चरण के बाद कम से कम एक इनपुट घटक अमान्य होता है, तो JSF इनपुट घटकों के किसी भी मॉडल मान को अपडेट नहीं करेगा। JSF प्रतिक्रिया चरण प्रस्तुत करने के लिए सीधे आगे बढ़ना होगा

  • जब JSF इनपुट घटकों को प्रतिपादित करता है, तो यह सबसे पहले जांच करेगा कि सबमिट किए गए मान null नहीं है और फिर इसे प्रदर्शित करें, अन्यथा यदि स्थानीय मान null नहीं है और फिर इसे प्रदर्शित करें, अन्यथा यह मॉडल मान प्रदर्शित करेगा

  • जब तक आप एक ही JSF दृश्य के साथ इंटरैक्ट कर रहे हैं, तब तक आप एक ही घटक राज्य के साथ काम कर रहे हैं।

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

आपके विशेष मामले में से एक तरीके मैन्युअल रूप से इनपुट घटकों के सभी आईडी एकत्रित करना है जो PartialViewContext#getRenderIds() द्वारा अद्यतित / पुन: रेंडर किए गए हैं और उसके बाद मैन्युअल रूप से अपनी स्थिति और सबमिट किए गए मूल्यों को EditableValueHolder#resetValue() द्वारा रीसेट करें।

 FacesContext facesContext = FacesContext.getCurrentInstance(); PartialViewContext partialViewContext = facesContext.getPartialViewContext(); Collection<String> renderIds = partialViewContext.getRenderIds(); for (String renderId : renderIds) { UIComponent component = viewRoot.findComponent(renderId); EditableValueHolder input = (EditableValueHolder) component; input.resetValue(); } 

आप इसे handleAddressChange() श्रोता विधि के अंदर कर सकते हैं, या पुनः उपयोग करने handleAddressChange() कार्यान्वयन के भीतर जो आप <f:actionListener> को इनपुट घटक में handleAddressChange() जो handleAddressChange() श्रोता विधि को बुला रहा है।


ठोस समस्या पर वापस आ रहा है, मैं कल्पना करता हूं कि यह JSF2 विनिर्देश में एक निरीक्षण है। यह हमारे लिए बहुत अधिक समझदारी बनायेगा, जेएसएफ डेवलपर्स, जब JSF विनिर्देश निम्नलिखित को जनादेश देगा:

  • जेएसएफ को एजेक्स अनुरोध से एक इनपुट घटक को अपडेट / पुन: प्रस्तुत करने की आवश्यकता होती है, और उस इनपुट घटक को एजेक्स अनुरोध की प्रक्रिया / निष्पादन में शामिल नहीं किया जाता है, तो JSF इनपुट घटक के मूल्य को रीसेट कर लेगा।

यह जेएसएफ अंक 1060 के रूप में रिपोर्ट किया गया है और एक पूर्ण और पुनः उपयोगणीय समाधान ओमनीफस लाइब्रेरी में ResetInputAjaxActionListener ( यहां स्रोत कोड और प्रदर्शन डेमो) के रूप में लागू किया गया है।

अपडेट 1: संस्करण 3.4 के बाद से, प्राइमफैसेस ने इस विचार पर आधारित है कि <p:resetInput> स्वाद में एक पूर्ण और पुन: प्रयोज्य समाधान भी शुरू किया।

अपडेट 2: संस्करण 4.0 के बाद से, <p:ajax> को एक नया बूलियन एट्रिब्यूट resetValues जो किसी अतिरिक्त टैग की आवश्यकता के बिना इस तरह की समस्या को हल करना चाहिए।

3 अपडेट करें: जेएसएफ 2.2 की शुरुआत <f:ajax resetValues> , उसी विचार को <p:ajax resetValues> । समाधान अब मानक JSF API का हिस्सा है।

BalusC की व्याख्या के रूप में, आप एक पुन: प्रयोज्य श्रोता भी जोड़ सकते हैं जो सभी इनपुट मानों को साफ करता है, उदाहरण के लिए:

 public class CleanLocalValuesListener implements ActionListener { @Override public void processAction(ActionEvent actionEvent) throws AbortProcessingException { FacesContext context = FacesContext.getCurrentInstance(); UIViewRoot viewRoot = context.getViewRoot(); List<UIComponent> children = viewRoot.getChildren(); resetInputValues(children); } private void resetInputValues(List<UIComponent> children) { for (UIComponent component : children) { if (component.getChildCount() > 0) { resetInputValues(component.getChildren()); } else { if (component instanceof EditableValueHolder) { EditableValueHolder input = (EditableValueHolder) component; input.resetValue(); } } } } } 

और जब भी आपको अपने स्थानीय मूल्यों को साफ करने की आवश्यकता होती है, उसका उपयोग करें:

 <f:actionListener type="com.cacib.bean.CleanLocalValuesListener"/> 

अपने टैग के अंदर <p:ajax/> , कृपया डेटा पुनः प्राप्त करने के लिए दृश्य को बताने के लिए एक विशेषता resetValues="true" जोड़ें, इस तरह से आपकी समस्या को ठीक करने में सक्षम होना चाहिए।