2011-05-24 9 views
7

Estoy usando JSF2 en GlassFish 3.¿No se debe omitir la validación cuando no se especifica ningún valor?

Tengo un formulario que acepta y un número de teléfono opcional. Tengo este validador de número de teléfono personalizado (abajo), y tengo el campo establecido en required = "false" porque el número de teléfono es opcional en el formulario.

El problema es que el valor en el campo siempre está siendo validado. ¿No se debe omitir la validación cuando no se especifica un valor?

Debe haber algo que estoy haciendo mal. Cualquier ayuda es apreciada, gracias!

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

} 

Respuesta

21

De JSF 2.0 en adelante, JSF por defecto validar los campos vacíos y con el fin de jugar bien con el nuevo Java EE 6 provisto JSR 303 API Bean Validation que ofrece entre otros @NotNull y sucesivamente.

Hay básicamente dos maneras de ir alrededor de este:

  1. a JSF para no validar los campos vacíos por la siguiente entrada en web.xml.

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

    La desventaja es obvia: no se puede utilizar JSR 303 Bean Validation en sus plenos poderes más.


  2. Hacer un nullcheck a sí mismo en el Validator.

    if (object == null) return; 
    

    Si usted no tiene un parámetro javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL contexto que se fija para true, entonces me gustaría echar a StringisEmpty() y comprobar así.

Cuestiones relacionadas