2013-02-06 17 views
8

मेरे पास जेएसएफ सत्यापन के लिए विशिष्ट उपयोग केस है। क्योंकि इस समग्र घटक का हिस्सा है, लेकिन समस्या यह बेहतर वर्णन किया गया है, तो हम यह मान यह एक हैइनपुट के रूप में केवल तभी इनपुट करें जब कुछ कमांड बटन दबाया जाता है

<p:inputText id="input" required="#{myBean.required}" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}"> 
    <p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/> 
</p:inputText> 

इनपुट के मूल्य संख्या (कुछ मामलों में यह भी एक स्ट्रिंग हो सकती है: उदाहरण के लिए मैं एक inputText क्षेत्र है संख्या)। इस इनपुट, फार्म का हिस्सा है फार्म के अंत में मैं सबमिट करें बटन:

<p:commandButton value="Save" actionListener="#{myBean.save}"/> 

मेरे अनुरोध कर रहे हैं:

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

मैं खाली होने पर इस इनपुट फ़ील्ड के सत्यापन को कैसे अक्षम कर सकता हूं, और केवल इस AJAX ईवेंट के लिए?

उत्तर

10

इनपुट के required अगर सहेजें बटन या दबाया नहीं है विशेषता जाँच (जो अपने ग्राहक की मौजूदगी से पहचाना जा सकता है चलो अनुरोध पैरामीटर मानचित्र में आईडी)।

<h:form> 
    <p:inputText ... required="#{not empty param[save.clientId] and myBean.required}" /> 

    <p:commandButton binding="#{save}" ... /> 
</h:form> 

(नोट: एक सेम संपत्ति के लिए कर नहीं यह बाँध कोड के रूप में है)

इस तरह यह केवल true मूल्यांकन करेगा जब सहेजें बटन वास्तव में दबाया जाता है।

या, यदि आप binding साथ कोई समस्या है और/या एक समस्या बटन के ग्राहक आईडी हार्डकोड की जरूरत नहीं है:

<h:form id="formId"> 
    <p:inputText ... required="#{not empty param['formId:buttonId'] and myBean.required}" /> 

    <p:commandButton id="buttonId" ... /> 
</h:form> 
+0

आपको लगता है कि उस मामले में आवश्यक सत्यापन छोड़ा जाएगा? क्यूं कर? – partlov

+0

जब तक आप इनपुट (और इस प्रकार परिवर्तन) भरते नहीं हैं, तब तक धुंध को धुंधला नहीं किया जाएगा। – BalusC

+0

शायद मैं तीसरे अनुरोध में विशिष्ट उपयोग मामले से स्पष्ट नहीं था। मैंने इसे संपादित किया। उपयोगकर्ता पाठ को हटा सकता है (शायद गलती से) और उस मामले में नाम इनपुट साफ़ कर दिया जाएगा। – partlov

2

इनपुट आवश्यक होने पर इनपुट को स्वीकार करते समय आवश्यक विशेषता को हटा दें। फिर एक कस्टम सत्यापनकर्ता लिखें जो केवल खाली इनपुट या संख्यात्मक इनपुट स्वीकार करता है।

<p:inputText id="input" value="#{myBean.value}" maxlength="20" disabled="#{myBean.disabled}" validator="customerNumericInputValidator"> <p:ajax event="blur" process="@this" update="name" listener="#{myBean.listener}"/> </p:inputText> 

सार्वजनिक वर्ग customerNumericInputValidator लागू करता सत्यापनकर्ता {

@Override 
public void validate(FacesContext facesContext, UIComponent uIComponent, 
     Object object) throws ValidatorException { 

    String number = (String) object; 
    number = Strings.nullToEmpty(number).trim(); 

    //if the request is a full request then number can not be empty 
    if(!FacesContext.getCurrentInstance().isPostback() && Strings.isNullOrEmpty(number)) 
    { 
     FacesMessage message = new FacesMessage(); 
     message.setSummary(Messages.getMessage("error empty value")); 
     message.setSeverity(FacesMessage.SEVERITY_ERROR); 
     throw new ValidatorException(message); 
    } 

    if(!Strings.isNullOrEmpty(number)) 
    { 
     if(!isNumber(number)) 
     { 
      FacesMessage message = new FacesMessage(); 
      message.setSummary(Messages.getMessage("error not numerical value")); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      throw new ValidatorException(message); 
     } 
    } 
} 

}

+0

लेकिन आवश्यक सत्यापन के मामले में कार्रवाई की जानी चाहिए जब प्रपत्र 'commandButton' के साथ प्रस्तुत किया गया है। – partlov

+0

जब कमांड बटन के साथ फॉर्म सबमिट किया जाता है तो आपका कस्टम वैलिडेटर भी निष्पादित किया जाएगा और यदि दर्ज मूल्य संख्या नहीं है तो यह अपवाद फेंक देगा; लेकिन अगर इनपुट खाली है तो यह शिकायत नहीं करेगा। – cubbuk

+0

ठीक है, अनुरोध 1 में मैंने लिखा था कि जब बटन बटन के साथ सबमिट किया जाता है, तो उसे अनदेखा नहीं किया जाना चाहिए!हम कह सकते हैं कि बटन के साथ सबमिट करते समय फ़ील्ड आवश्यक है, लेकिन धुंध घटना पर AJAX के साथ सबमिट करते समय आवश्यक नहीं होना चाहिए। – partlov

संबंधित मुद्दे