दिलचस्प पोस्ट
सी ++ 11 टाइप नहीं निकालता है जब std :: function या lambda फ़ंक्शंस शामिल होते हैं कैसे जावास्क्रिप्ट / jQuery के साथ पृष्ठ के शीर्ष पर स्क्रॉल करें? आईफ्रेम के तृतीय पक्ष साइट फ्रेम के माध्यम से मेरी साइट पृष्ठ को कैसे लोड किया जा सकता है एंड्रॉइड डिवाइस कंपन कैसे करें? स्थिर HTML के साथ सामान्य हेडर / पाद लेख अनुप्रयोग में पूर्ण शैलियाँ। स्रोत बनाम विंडो। संसाधनों? सी बुरा अभ्यास में लचीला सरणी के सदस्यों का उपयोग कर रहे हैं? जावा में शून्य क्यों मुख्य () है? अलग JSON एपीआई सर्वर और क्लाइंट अलग करें? वेब ब्राउज़र से जीपीएस स्थान प्राप्त करें किसी विशेष फ़ाइल एक्सटेंशन के लिए Android Intent फ़िल्टर? सी # में विन्डोज़ फॉर्म्स के लिए विज़ार्ड्स बनाना सबसे लंबे समय तक बढ़ते हुए बदलाव PHP का उपयोग करते हुए मिनटों और मिनटों में मिनटों की संख्या में बदलाव करें एक पायथन ऐप से Google खोज

सत्यापन कैसे दबाए बटन पर निर्भर करते हैं?

मैंने फॉर्म बना लिया है और मैं एक मौजूदा तालिका में मौजूदा आइटम दिखाना चाहता हूं, जबकि एक नया बना रहा है। मैं मिलान आइटम दिखाना चाहता हूं क्योंकि फॉर्म भरना है I लेकिन जब मैं फॉर्म को पूरा किए बिना सूची को फ़िल्टर करने की कोशिश करता हूं, तो सत्यापन संदेश दिखाई देते हैं और तालिका अपडेट नहीं होती है।

पता नहीं कि यह संभव है, लेकिन मैं इस तरह से कुछ करने वाला नहीं हूं:

<h:form id="form"> <h:outputText value="Name: "/> <p:inputText value="#{itemsBean.name}" id="name" required="true"/> <br/> <h:outputText value="Description: "/> <p:inputText value="#{itemsBean.description}" id="description" required="true"/> <p:commandButton value="Save" update="form" actionListener="#{itemsBean.save}"/> //validate and save <p:commandButton value="Filter" update="form" actionListener="#{itemsBean.updateItemsList}"/> //don't validate, and update the table. <p:dataTable id="list" value="#{itemsBean.itemsList}" var="item"> <p:column> <h:outputText value="#{item.name}"/> </p:column> <p:column> <h:outputText value="#{item.description}"/> </p:column> </p:dataTable> </h:form> 

मैं जेएसएफ के लिए बहुत नया हूँ और यह मेरा पहला सवाल है मुझे आशा है कि यह कई लोगों और मेरे लिए उपयोगी है।

वेब के समाधान से एकत्रित समाधान "सत्यापन कैसे दबाए बटन पर निर्भर करते हैं?"

मैं समझता हूं कि आप name इनपुट फ़ील्ड के आधार पर फ़िल्टर करना चाहते हैं। <p:commandButton> डिफ़ॉल्ट रूप से एक <p:commandButton> अनुरोध भेजता है और इसमें एक process एट्रिब्यूट होता है जिसमें आप निर्दिष्ट कर सकते हैं कि सबमिट के दौरान कौन सा घटक आप संसाधित करना चाहते हैं। आपके विशेष मामले में, आपको केवल name इनपुट फ़ील्ड और वर्तमान बटन पर प्रक्रिया करना चाहिए (ताकि इसकी कार्रवाई को लागू किया जा सके)।

 <p:commandButton process="@this name" ... /> 

process विशेषता घटकों के (सापेक्ष) क्लाइंट आईडी के स्थान से अलग संग्रह ले सकते हैं, जिसमें @this यह वर्तमान घटक को संदर्भित करता है। <p:commandButton> मामले में यह चूक @form (जो वर्तमान फॉर्म और दबाए गए बटन के सभी इनपुट फ़ील्ड को कवर करता है), यही कारण है कि वे सभी को आपके प्रारंभिक प्रयास में मान्य किया गया है। उपरोक्त उदाहरण में, अन्य सभी इनपुट फ़ील्ड पर कार्रवाई नहीं की जाएगी (और इस प्रकार भी मान्य नहीं)।

यदि आप हालांकि सभी क्षेत्रों के लिए required सत्यापन को छोड़ने का इरादा रखते हैं, जब भी प्रश्न में बटन दबाया जाता है, ताकि आप अंततः कई फ़ील्ड को संसाधित कर सकें, जो जरुरी सभी को भरने की आवश्यकता नहीं है, तो आपको required="true" एक सशर्त बजाय जो जांचता है कि बटन दबाया गया है या नहीं उदाहरण के लिए, इसे true मूल्यांकन करें, जब सहेजें बटन दबाया गया है:

 <p:inputText ... required="#{not empty param[save.clientId]}" /> ... <p:inputText ... required="#{not empty param[save.clientId]}" /> ... <p:commandButton binding="#{save}" value="Save" ... /> 

इस तरह इसे required="true" रूप में मान्य नहीं किया जाएगा required="true" जब एक अलग बटन दबाया जाता है। उपरोक्त उदाहरण में चाल यही है कि दबाए गए बटन का नाम (जो मूल रूप से क्लाइंट आईडी है) अनुरोध पैरामीटर के रूप में भेजा गया है और आप अनुरोध पैरामीटर मानचित्र में इसकी उपस्थिति की जांच कर सकते हैं।

यह भी देखें:

  • प्रिफाईफेस प्रक्रिया / अपडेट और जेएसएफ़ को समझना च: अजाक्स निष्पादित / रेंडर विशेषताएँ

मैंने इसे गैर-एजेक्स के साथ प्रस्तुत किया है:

 <p:inputText ... required="#{not empty param.includeInSave1}" /> ... <p:inputText ... required="true" /> ... <p:commandButton value="Save1" ajax="false"> <f:param name="includeInSave1" value="true" /> </p:commandButton> <p:commandButton value="Save2" ajax="false" /> 

पहला इनपुट केवल आवश्यक है कि वह Save1 बटन सबमिट करें।

इसके अतिरिक्त BalusC उत्तर (बहुत उपयोगी और पूर्ण) को मैं जोड़ना चाहता हूं कि जब आप <h:commandButton /> उपयोग करते हैं तो यह मान्य होगा (आवश्यक, कस्टम सत्यापन) <h:form /> में सभी फ़ील्ड जहां कमांड बटन स्थित है, इसलिए जब आपको एक से अधिक आदेश बटन का उपयोग करने की आवश्यकता होती है तो आप यह सोच सकते हैं कि कमांड बटन की कार्रवाइयां सबमिट करने में अनपेक्षित व्यवहार से बचने के लिए अलग-अलग जिम्मेदारियों के लिए अलग <h:form /> अलग <h:form /> का उपयोग करना एक अच्छा अभ्यास है। यह एक बालास्य उत्तर में अच्छी तरह से समझाया गया है: एकाधिक एच: जेएसएफ पृष्ठ में फ़ॉर्म

यदि आपके फ़ॉर्म में मान्यताओं हैं और आप <h:form /> अपडेट नहीं करते हैं या आप संदेश नहीं दिखाते हैं, तो आप सिरदर्द सोच सकते हैं कि <h:commandButton /> आपकी कार्रवाई नहीं कर रहा है, लेकिन संभावना एक सत्यापन समस्या है यह दिखाया नहीं गया है।

सत्यापन को अनदेखा करने के लिए इस तरह अपने फ़िल्टर कमांडबटन को बदलें:

 <p:commandButton value="Filter" update="list" actionListener="#{itemsBean.updateItemsList}" process="@this"/> 

संपादित करें:

अतः पर संबंधित पोस्ट, मुझे लगता है कि यह आपकी समस्या को भी हल करेगा I

JSF 2.0: JSR-303 बीन सत्यापन को कैसे छोड़ें?