lunes, 5 de mayo de 2008

Converter

Es un interfaz que extiende de Serializable que puede realizar conversiones de Object-a-String y String-a-Objeto utilizando la tecnología JSF, de ahí que uno de los parámetros que recibe el parámetro es el propio contexto de la aplicación web.
Los converters se aplican en el momento en el que nuestra aplicación recibe valores o devuelve valores. Cuando recibimos una solicitud jsf, una de las fases de dicha recepción de la solicitud está la de aplicar converters en función del componente UI, ya que los converters son una propiedad de los componentes. Y por otro lado necesitamos convertir a String los objetos de nuestra aplicación cuando dichos objetos se pintan en la página web correspondiente, es decir no queremos que nos salga el id de objeto ej 1312341...@es.cea.academia.Alumno, sino "matricula:2345"

La libreria es javax.faces.convert.Converter;

Métodos que utiliza:
--public Object getAsObject(FacesContext context,UIComponent component,String value) throws ConverterException-->Convertir el valor, que está asociada con la UIComponent especificado, en un modelo de datos Object de que sea apropiado.

--public String getAsString(FacesContext context,UIComponent component,Object value) throws ConverterException-->convierte el valor que esta asociado al UIComponent en string que es adecuada para ser incluido en la respuesta generada durante la fase de respuesta.

Cuando se crea el converter hay que decirle a la aplicación que existe,eso se hacen el en face-config.xml

Un ejemplo para verlo más claro:

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

public class ProvinciaConverter implements Converter {

public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
// TODO Auto-generated method stub
return null;
}

public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {

return ProvinciasUtil.getInstance().getProvincia((Long)arg2);
}

}

En mi proyecto tengo un archivo jsf que en un column tiene la propiedad converter="ProvinciaConverter"
Este llama a la clase arriba descrita que lo que hace es recibir un long y devolver el nombre asociado a ese numero,es decir un string.(el nombre se recupera en la clase ProvinciasUtil,solo he puesto este trozo de código)