मैं कई इनपुट घटकों को प्रमाणित करने के लिए OmniFaces' <o:validateAll> सत्यापनकर्ता का उपयोग करता हूं। यह तब तक ठीक काम करता है जब तक कि मैं इसे RichFaces <rich:tabPanel> में नहीं डालता। जब मैं ऐसा करता हूं और फ़ील्ड को रिक्त छोड़ देता हूं, तो सत्यापन विफल रहता है (अपेक्षित के रूप में), लेकिन असफल सत्यापन के बावजूद सक्रिय टैब बदल जाता है। जब भी सत्यापन विफल हो जाता है, तो मैंने अन्य सत्यापनकर्ताओं को tabPanel
को दूसरे टैब पर स्विच करने से रोकने की कोशिश की।<o: validateAll> अन्य मान्यताओं से अलग क्यों व्यवहार करता है?
इसका कारण क्या हो सकता है?
मैं वर्तमान में ओमनीफेस 2.1 और रिचफेस 4.5.17 का उपयोग कर रहा हूं। वाइल्डफ्लाई 9.0.2 पर मोजररा 2.2.12 के साथ अंतिम।
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:o="http://omnifaces.org/ui"
xmlns:rich="http://richfaces.org/rich">
<h:form id="form">
<rich:messages />
<rich:tabPanel id="tabPanel">
<rich:tab id="tab1" header="Tab 1">
<h:inputText id="myDouble" value="#{someDoubleVal}">
<f:validateDoubleRange minimum="1.0" maximum="2.0"/>
</h:inputText>
<o:validateAll id="allValid" components="myDouble" message="Missing value!" />
</rich:tab>
<rich:tab id="tab2" header="Tab 2">
Just another tab to switch.
</rich:tab>
</rich:tabPanel>
</h:form>
</ui:composition>
1,0 और 2.0 के बाहर एक मान दर्ज करें और अपेक्षित व्यवहार को देखने के लिए टैब 2 पर स्विच करके देखें, <f:validateDoubleRange>
से शुरू हो रहा:
यहाँ समस्या पुन: पेश करने एक्सएचटीएमएल कोड है एक चेहरे-संदेश प्रदर्शित किया जाता है और पहला टैब अभी भी सक्रिय है।
इनपुट खाली छोड़ दें और <o:validateAll>
के व्यवहार को देखने के लिए टैब 2 पर स्विच करने का प्रयास करें: सत्यापन विफल रहता है (चेहरे-संदेश प्रदर्शित होता है), लेकिन टैब 2 सक्रिय है।
अद्यतन: वर्णित व्यवहार switchType="ajax"
(डिफ़ॉल्ट) के साथ-साथ switchType="server"
साथ साथ लागू होता है। दोनों स्थितियों में, टैब-पैनल शामिल इनपुटों को सबमिट करता है, इसलिए उपयोगकर्ताओं के दृष्टिकोण से, एक टैब-स्विच <h:commandButton>
सबमिट के समान प्रतीत होता है (तकनीकी रूप से अंतर हो सकता है, मुझे नहीं पता टैब-पैनल के कार्यान्वयन विवरण)।
अगर मैं एक <f:setPropertyActionListener>
के साथ एक नियमित <h:commandButton>
के माध्यम से टैब स्विच करते हैं, <o:validateAll>
अन्य प्रमाणकों के रूप में एक ही रास्ता है, यानी टैब स्विच मान्यता त्रुटि के कारण नहीं किया जाता है व्यवहार करता है।
<rich:tabPanel id="tabPanel" activeItem="#{bb.activeTab}">
...
<rich:tab id="tab1" name="tab1" header="Tab 1">
...
<h:commandButton value="submit">
<f:setPropertyActionListener value="tab2" target="#{bb.activeTab}" />
</h:commandButton>
...
</rich:tab>
</rich:tabPanel>
नोट: यह सिर्फ एक minimalistic समस्याग्रस्त व्यवहार दिखा उदाहरण है। मेरे वास्तविक कोड में मेरे पास <o:validateAll>
द्वारा मान्य एक भी घटक नहीं है और मैं वास्तव में इनपुट मानों को बैकिंग-बीन से जोड़ता हूं। मनाया व्यवहार बिल्कुल वही है।
मुझे अभी एहसास हुआ, एक्सएचटीएमएल कोड में '' टैग की स्थिति बदलना व्यवहार बदलता है! इसे उन घटकों के सामने रखें जिन्हें वास्तव में मान्य किया जाना चाहिए और यह अपेक्षा के अनुसार काम करता है। क्या यह वांछित व्यवहार या OmniFaces में एक बग है? दस्तावेज़ीकरण इस प्रभाव का जिक्र नहीं करता है। कोई विचार? –
यह सुनिश्चित नहीं है कि कितना समृद्ध है: टैबपेनल कवर के तहत काम करता है, लेकिन ऑर्डरिंग व्यवहार को http://omnifaces.org/docs/javadoc/2.5/org/omnifaces/component/validator/ValidateMultipleFields के पहले "सामान्य उपयोग" अनुच्छेद में दस्तावेज किया गया है। एचटीएमएल – BalusC
सही, ऑर्डरिंग व्यवहार दस्तावेज है। लेकिन यह भी कहता है "_This सत्यापनकर्ता को फॉर्म में कहीं भी रखा जा सकता है, लेकिन ध्यान रखें कि घटकों को फॉर्म में दिखाई देने के क्रम में मान्य किया जाएगा ._"। हालांकि, यह स्पष्ट नहीं करता है कि सत्यापन आसपास के टैब-पैनल के विभिन्न व्यवहार को क्यों ट्रिगर करता है। लेकिन हो सकता है कि यह RichFaces घटक है जो यहां अजीब है। मैं इंप्रेशन के तहत हूं, रिचफेस में वैसे भी ऐसी विषमताएं हैं। शायद मैं प्राइमफेस के साथ उदाहरण का प्रयास करूंगा और देख सकता हूं कि यह कैसे काम करता है। –