Para usar esto debes haber configurado primero el javaloader 1.0 http://www.compoundtheory.com/javaloader/docs/ de tu aplicacion de coldfusion.
Para validar primero necesitamos un bean del modelo, usaremos para el ejemplo la clase Contact.java.
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
@Table(name="Contacts")
public class Contact {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "contact_id")
private Long id;
@Size(max=50)
@Column(name="contact_name")
private String name;
@Size(max=100)
@Column(name="contact_email")
private String email;
public Contact(){
this.name = "";
this.email = "";
}
//getters and setters ...
}
Spring Framework nos da una interfaz de validacion fácil de usar y libre de contexto, asi que creamos un ContactValidator. Esta interfaz tiene dos métodos, support(Class) y validate(Oject, Errors). La referencia Object indica el contacto que vamos a validar, y Errors es una interfaz de springframework que guarda los errores si estos ocurren. Esto se explica mejor en el capitulo 5 de la referencia de Spring Framework.
ContactValidator.java
package com.admios.utils;
import org.springframework.validation.*;
import com.admios.model.Contact;
public class ContactValidator implements Validator {
private static String emailRegularExpression = "[a-zA-Z_]+.+@.+\\..+";
@Override
public boolean supports(Class<?> clazz) {
return Contact.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "name", "You must provide a name for this contact.");
Contact cont = (Contact) target;
if (! cont.getEmail().matches(emailRegularExpression)){
errors.rejectValue("email", "Please provide a valid email address in the format user@domain.com (Display Name)");
}
}
public static String getEmailRegularExpression() {
return emailRegularExpression;
}
}
Ok, Vamos a usar el camino mas facil para hacer el llamado en ColdFusion, solo queremos enviar el contacto al servicio y recoger los errores, sin tener que lidiar con el metodo de validacion directamente.
En Util.java creamos un metodo estatico para validar el contacto y que nos traiga de vuelta los errores. BindException es una implementación de Errors.
package com.admios.utils;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import com.admios.model.Contact;
public class Util {
public static Errors validateContact(Contact contact){
ContactValidator validator = new ContactValidator();
Errors errors = new BindException(contact, "contact");
validator.validate(contact, errors);
return errors;
}
}
Una vez hecho esto, y haber sido probado con JUnit, podemos mover el servicio a la aplicacion de coldFusion.
check_contact.cfm
<cfset lstLocalErrors = "">
<cfparam name="is_active" default="0">
<!-----------------------------------------------------------------------------
! Binding And Validation
!----------------------------------------------------------------------------->
<cfscript>
contact = server.javaloader.create("com.admios.model.Contact").init();
utilClass = server.javaloader.create("com.admios.utils.Util").init();
contact.setName(con_name);
contact.setEmail(con_email);
errors = utilClass.validateContact(contact);
</cfscript>
<cfif errors.getErrorCount() eq 0>
<!--------------------------------------------------------------------------
! Save, if no occurs errors.
!------------------------------------------------------------------------->
<cfinclude template="/includes/user/event/save_contact.cfm">
<cfelse>
<cfset lstErrorFields = "">
<cfscript>
errorName = errors.getFieldError("name");
errorEmail = errors.getFieldError("email");
</cfscript>
<!-------------------------------------------------------------------------
! error messages
!------------------------------------------------------------------------->
<cfif isDefined("errorName")>
<cfset lstLocalErrors = ListAppend(lstLocalErrors, errorName.getCode(),CHR(9))>
<cfset lstErrorFields = ListAppend(lstErrorFields, 'con_name')>
</cfif>
<cfif isDEfined("errorEmail")>
<cfset lstLocalErrors = ListAppend(lstLocalErrors, errorEmail.getCode(), CHR(9))>
<cfset lstErrorFields = ListAppend(lstErrorFields, 'con_email')>
</cfif>
<cfset lstErrors = ListAppend(lstErrors, lstLocalErrors, CHR(9))>
</cfif>
Con errors.getFieldError("name") obtenemos el campo de error que validamos en ContactValidator.java
ValidationUtils.rejectIfEmpty(errors, "name", "You must provide a name for this contact.");
Y lo mismo para el email.
El errorEmail.getCode() nos da el codigo para al propiedad a ser mostrada en la vista del usuario. Si el codigo no es encontrado en el archivo de properties, entonces el mismo "codigo" es devuelto.
Reference:
spring-framework-reference.pdf
No hay comentarios:
Publicar un comentario