Validador de Números de Tarjetas de crédito en JSF.
CreditCard Validator in JSF
Implementamos el validador:
package view.validators;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
public class ValidatorCreditCard implements Validator{
//Credit card validator for AMEX, VISA, MasterCard only.
//Allows spaces, dashes, or no separator between digit groups according to the layout
// (4-6-5 for AMEX, 4-4-4-4 for Visa and Mastercard)
String regex="^((4\\d{3})|(5[1-5]\\d{2}))(-?|\40?)(\\d{4}(-?|\40?)){3}|^(3[4,7]\\d{2})(-?|\40?)\\d{6}(-?|\40?)\\d{5}";
public void validate(FacesContext facesContext, UIComponent uiComponent,
Object object) {
String val = (String)object;
if (!val.matches(regex)) {
throw new ValidatorException(new FacesMessage("La Tarjeta de Credito no es valida"));
}
}
}
Lo registramos en el faces-config:
<validator> <validator-id>ValidatorCreditCard</validator-id> <validator-class>view.validators.ValidatorCreditCard</validator-class> </validator>
Lo usamos en nuestro componente:
<af :inputText value="#{bindings.numeroTarjetaCredito.inputValue}"
label="#{bindings.numeroTarjetaCredito.label}"
required="#{bindings.numeroTarjetaCredito.mandatory}"
columns="#{bindings.numeroTarjetaCredito.displayWidth}"
binding="#{backing_paginas_pagoTarjeta.inputText1}"
id="inputText1" autoSubmit="true">
<af :validator binding="#{ValidatorCreditCard}" validatorId="ValidatorCreditCard"/>
</af>
