2011-05-24 9 views
7

मैं ग्लासफ़िश पर जेएसएफ 2 का उपयोग कर रहा हूं 3.कोई मान निर्दिष्ट नहीं होने पर सत्यापन को छोड़ दिया जाना चाहिए?

मेरे पास एक ऐसा फॉर्म है जो स्वीकार करता है और वैकल्पिक फोन नंबर। मेरे पास यह कस्टम फोन नंबर सत्यापनकर्ता है (नीचे), और मेरे पास आवश्यक फ़ील्ड सेट है = "झूठी" क्योंकि फ़ोन नंबर फॉर्म में वैकल्पिक है।

समस्या यह है कि, क्षेत्र में मूल्य हमेशा मान्य हो रहा है। निर्दिष्ट मूल्य नहीं होने पर सत्यापन को छोड़ना नहीं चाहिए?

कुछ ऐसा होना चाहिए जो मैं गलत कर रहा हूं। हर प्रकार की सहायता का स्वागत है, धन्यवाद!

<h:outputText value="#{msg.profile_otherPhone1Label}#{msg.colon}" /> 
    <h:panelGroup> 
    <p:inputText label="#{msg.profile_otherPhone1Label}" id="otherPhone1" value="#{profileHandler.profileBean.otherPhone1}" required="false"> 
     <f:validator validatorId="phoneValidator" /> 
    </p:inputText> 
    <p:spacer width="12"/> 
    <h:outputText value="#{msg.profile_phoneExample}" /> 
</h:panelGroup> 

#

public class PhoneValidator implements Validator { 

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

     String phone = (String) object; 

     // count the digits; must have at least 9 digits to be a valid phone number 
     // note: we're not enforcing the format because there can be a lot of variation 
     int iDigitCount = 0; 
     for (char c : phone.toCharArray()) { 
      if (Character.isDigit(c)) { 
       iDigitCount++; 
      } 
     } 

     if (iDigitCount < 9) { 
      FacesMessage message = new FacesMessage(); 
      message.setSummary(Messages.getMessage("error_phoneNumberNotValid")); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      throw new ValidatorException(message); 
     } 
    } 

} 

उत्तर

21
JSF 2.0 से पर

, JSF डिफ़ॉल्ट रूप से रिक्त क्षेत्रों को मान्य होगा नए जावा ईई 6 के साथ अच्छी तरह से खेलने के लिए JSR 303 बीन मान्यता एपीआई जो अन्य लोगों के अलावा प्रदान करता है प्रदान की के साथ-साथ @NotNull और चालू।

  1. टेल JSF web.xml में निम्नलिखित प्रविष्टि द्वारा रिक्त फ़ील्ड मान्य नहीं करने के लिए:

    मूल रूप से दो इस के चारों ओर जाने के लिए तरीके हैं।

    <context-param> 
        <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name> 
        <param-value>false</param-value> 
    </context-param> 
    

    नुकसान स्पष्ट है: यदि आप अब अपनी पूरी शक्तियों पर JSR 303 बीन सत्यापन का उपयोग नहीं कर सकते हैं।


  2. Validator में एक nullcheck स्वयं करें।

    if (object == null) return; 
    

    आप एक javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL संदर्भ परम जो true पर सेट है की जरूरत नहीं है, तो आप String लिए डाली और isEmpty() जांच करके यह भी करना चाहते हैं।

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

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