Como crear un conversor JSF

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:

  • getAsObject: Que recupera un String y devuelve el objeto de nuestro modelo de negocio correspondiente.
  • getAsString: Que recupera un objeto de nuestro modelo de negocio y devuelve el String que lo representa.

Una vez implementados ambos métodos deberemos anotar dicha clase de la siguiente manera:

  • @BypassInterceptors: Deshabilita las intercepciones a esta clase que pudiera ocasionar Seam para no perder el control de la ejecución del código.
  • @FacesConverter(“nombreConversor”): Identifica esta clase como un conversor y le da un nombre para recuperarlo en la parte de la vista.

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>	
  • fdw2.0/fundeweb2.0/gt/como_crear_un_conversor_jsf.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)