validar validadores validaciones number formularios formulario etiquetas jsf jsf-2 validation

jsf - validadores - ¿No se debe omitir la validación cuando no se especifica un valor?



validadores java (1)

Desde JSF 2.0 en adelante, JSF también validará de forma predeterminada los campos vacíos para jugar bien con la nueva API de validación de @NotNull JSR 303 proporcionada por Java EE 6 que ofrece, entre otros, @NotNull y on.

Básicamente hay dos formas de evitar esto:

  1. Dígale a JSF que no valide los campos vacíos con 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: ya no se puede utilizar la validación de frijol JSR 303 con todos sus poderes.

  2. Realice una verificación nula en el Validator .

    if (object == null) return;

    Si no tiene un param de contexto javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL que esté configurado en true , entonces le gustaría convertirlo a String y también comprobar que es isEmpty() .

Estoy usando JSF2 en GlassFish 3.

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 se valida. ¿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); } } }