Trabajando con PropertyEditor

Los PropertyEditor son muy fáciles de usar y nos facilitan mucho el trabajo, su principal utilidad es cuando enviamos un String desde la capa de presentación y queremos que al negocio llegue un Object (y viceversa).

Para mayor entendimiento, explicare su funcionamiento a través de un ejemplo sencillo, en el cual, el objeto que estoy registrando tiene un atributo fecha de tipo Date, pero lo que recibo de la capa de presentación un String “fecha” en formato dd/MM/yyyy, para evitar un seguro error es necesario interceptar ese objeto y hacer la conversión de String a Object.

Para esto creare un ProperyEditor y le sobrescribiré el método setAsText:

public class FechaPropertyEditor extends PropertyEditorSupport{

public class FechaPropertyEditor extends PropertyEditorSupport{

public FechaPropertyEditor() {

}

@SuppressWarnings(“deprecation”)

@Override

public void setAsText(String fecha) throws IllegalArgumentException {

String[] splittedDate = fecha.split(“/”);

int day = Integer.parseInt(splittedDate[0]);

int month = Integer.parseInt(splittedDate[1]);

int year = Integer.parseInt(splittedDate[2]);

year -= 1900;

Date date = new Date();

date.setDate(day);

date.setMonth(month);

date.setYear(year);
setValue(date);
}
}

También es necesario crear un PropertyEditorRegistrar, el cual se va a encargar de registrar y asociar cada PropertyEditor con el tipo de dato que va a resolver.

import org.springframework.beans.PropertyEditorRegistrar;

import org.springframework.beans.PropertyEditorRegistry;

public class CustomPropertyEditorRegistrar implements PropertyEditorRegistrar{

@Override

public void registerCustomEditors(PropertyEditorRegistry propertyEditorRegistry) {

propertyEditorRegistry.registerCustomEditor(java.util.Date.class, new FechaPropertyEditor());

propertyEditorRegistry.registerCustomEditor(OtroDato.class, new OtroPropertyEditor());

Luego debemos indicarle al controlador encargado de recibir el Object, que este va a ser interceptado por un PropertyEditorRegistrar, para ello sobrescribiremos el método initBinder.

public class GestionarEntrenoSimpleFormController   extends SimpleFormController {

private final PropertyEditorRegistrar customPropertyEditorRegistrar;

public GestionarEntrenoSimpleFormController(PropertyEditorRegistrar customPropertyEditorRegistrar) {

this.customPropertyEditorRegistrar = customPropertyEditorRegistrar;

setCommandClass(Entreno.class);

setCommandName(“entreno”);

}

@Override

protected ModelAndView onSubmit(HttpServletRequest request,

HttpServletResponse response, Object command, BindException errors) throws Exception {

//IMPLEMENTACION

}

@Override

protected void initBinder(HttpServletRequest request,

ServletRequestDataBinder binder) throws Exception {

this.customPropertyEditorRegistrar.registerCustomEditors(binder);

}

}

Y por último, en el fichero de configuración creamos el bean de nuestro PropertyEditorRegistrar y se lo inyectamos como parámetro de constructor al constructor del controlador, quedaría así:

<bean id=“customPropertyEditorRegistrar”

class=“common.web.mvc.propertyEditos.CustomPropertyEditorRegistrar”/>

<bean id=“gestionarEntrenoSimpleFormController”

class=“common.web.mvc.controllers.GestionarEntrenoSimpleFormController>

<constructor-arg ref=“customPropertyEditorRegistrar” />

</bean>

Finalmente decir que existen otras formas de implementar un PropertyEditor, pero esta me ha parecido la mas practica y aconsejable. Espero te haya servido y hasta la próxima.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: