2011-05-24 12 views
7

Używam JSF2 na GlassFish 3.Czy zatwierdzanie nie powinno być pomijane, gdy nie podano żadnej wartości?

Mam formularz akceptujący i opcjonalny numer telefonu. Mam ten niestandardowy weryfikator numeru telefonu (poniżej) i mam pole ustawione na required = "false", ponieważ numer telefonu jest opcjonalny w formularzu.

Problem polega na tym, że wartość w polu zawsze jest sprawdzana. Czy nie powinno się pominąć sprawdzania poprawności, gdy nie ma określonej wartości?

Musi być coś, co robię źle. Jakakolwiek pomoc się przyda, dzięki!

<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); 
     } 
    } 

} 

Odpowiedz

21

Od JSF 2.0 na, JSF będzie domyślnie sprawdzania pustych pól, jak również w celu grać dobrze z nowym Java EE 6 Nie JSR 303 API Bean Validation która oferuje m.in. @NotNull i wł.

Istnieją dwa sposoby, aby obejść to:

  1. Tell JSF nie walidacji pustych pól brzmienie wpisu web.xml.

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

    Wada jest oczywista: nie można już używać JSR 303 Bean Validation z pełną mocą.


  2. Wykonaj nullcheck siebie w Validator.

    if (object == null) return; 
    

    Jeśli nie masz param javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL kontekście, który jest ustawiony na true, następnie chcesz oddać do String i sprawdzić isEmpty() również.

Powiązane problemy