Muchas veces, en un componente de la parte de la vista (xhtml) se muestra en un input,textArea, comboBox,etc.. una cadena de texto que representa un objeto Java. Por ejemplo, en un comboBox tenemos una lista de paises, nosotros en el combo sólo vemos el “String” que representa el objeto, pero en memoria tendremos un objeto Pais más complejo con: idioma, prefijo telefónico,etc.
Si queremos que cuando un usuario en dicho combo, al seleccionar un país, la aplicación lo traduzca en el objeto Pais que maneja, necesitamos un conversor.
Un conversor, por tanto es una clase que transforma un objeto de tipo String, al objeto de nuestro modelo de negocio que le corresponde y viceversa.
Para poder implementar un conversor deberemos crear una clase Java que implemente la interfaz Converter. Esta interfaz expone dos métodos:
Una vez implementados ambos métodos deberemos anotar dicha clase de la siguiente manera:
El código Java resultante quedaría así:
@BypassInterceptors @FacesConverter("conversorPrueba") public class ConversorPrueba implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { .... .... } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { .... .... } }
Una vez preparada la clase Java que implementa nuestro conversor, sólo queda añadirlo en el componente xhtml que queramos. Para ello debemos hacer uso del tag <f:converter converterId=“nombreConversor” /> dentro del componente que queramos.
En el ejemplo a continuación hemos puesto el conversor dentro de un objeto Input, de manera que tras la entrada por teclado del usuario, en el submit, el conversor transformará el String que recupere en el objeto Java equivalente y lo mapeará en el Bean de respaldo que indica el componente <h:input>
<h:inputText id="conver" value="#{manejadorAnuncios.prueba}" size="20" required="true"> <f:converter converterId="conversorPrueba" /> </h:inputText>