Pregunta

¿Cómo puedo crear un validador que si el usuario inputed los mismos valores en el campo de la contraseña y el campo de confirmación de contraseña?

Lo hice en el bean gestionado, pero yo prefiero hacerlo usando un validador JSF ...

La verdadera pregunta es, cómo crear un validador de que el acceso a otros componentes JSF distintos del componente en fase de validación?

Estoy usando ADF Faces 11.

Gracias ...

¿Fue útil?

Solución

  

La verdadera pregunta es, cómo crear un validador de que el acceso a otros componentes JSF distintos del componente en fase de validación?

No trate de acceder directamente a los componentes; te arrepentirás. mecanismo de validación de la obra de JSF mejor en la prevención de basura de entrar en el modelo.

Se puede usar un tipo diferente de bean administrado; algo de la forma:

/*Request scoped managed bean*/
public class PasswordValidationBean {
  private String input1;
  private String input2;
  private boolean input1Set;

  public void validateField(FacesContext context, UIComponent component,
      Object value) {
    if (input1Set) {
      input2 = (String) value;
      if (input1 == null || input1.length() < 6 || (!input1.equals(input2))) {
        ((EditableValueHolder) component).setValid(false);
        context.addMessage(component.getClientId(context), new FacesMessage(
            "Password must be 6 chars+ & both fields identical"));
      }
    } else {
      input1Set = true;
      input1 = (String) value;
    }
  }
}

Esto se ve obligada utilizando el mecanismo de unión método:

<h:form>
  Password: <h:inputSecret
    validator="#{passwordValidationBean.validateField}"
    required="true" />
  Confirm: <h:inputSecret
    validator="#{passwordValidationBean.validateField}"
    required="true" />
  <h:commandButton value="submit to validate" />
  <!-- other bindings omitted -->
  <h:messages />
</h:form>

En el futuro, debería ser capaz de hacer este tipo de cosas usando Bean Validation ( JSR 303 ).

Otros consejos

Siempre se puede tirar del valor de sus otros campos de la mapa de contexto y realizar validaciones en varios campos. Algo así como a continuación:

public void  validatePassword2(FacesContext facesContext, UIComponent uIComponent, Object object) throws ValidatorException{
    String fieldVal = (String)object;

    String password1 = (String)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("password1");
    if(!password1.equalsIgnoreCase(fieldVal)){
        FacesMessage message = new FacesMessage("Passwords must match");
        throw new ValidatorException(message);
    }
}   

y el JSF es como la siguiente:

<h:inputSecret value="#{profile.password2}" validator="#{brokerVal.validatePassword2}" required="true" requiredMessage="*required" id="password2" />

HTH

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top