ICEfaces: Custom Converter

Ya hace un buen rato Hugol me preguntaba de como poder obtener un objeto seleccionado a través de un componente SelectOneMenu con ICEfaces, ya que siempre le tocaba obtener el valor del id y despues volver a reconstruir el objeto y esa tarea es super tediosa, entonces alli surge la necesidad de utilizar "Converter", ¿que es esto? el mecanismo es el de conversión y está definido por el interfaz javax.faces.convert.Converter y sus múltiples implementaciones. Las conversiones aseguran que el tipo de un dato introducido en un formulario JSF sea el correcto.

Como es de costumbre en este blog desarrollare un pequeño ejemplo de como crear un Custom Converter, para un conjunto de objetos de tipo Product generado a través de JPA con Netbeans 6.7 y Apache Derby en un SelectOneMenu (dropdown List).

Lo primero es crear una clase que implemente la interfaz javax.faces.convert.Converter y desarrollar los métodos getAsString y getAsObject. El primero convierte el valor de la cadena del item seleccionado al objeto que queremos obtener, el según convierte el objeto ya convertido en cadena para colocarlo en el value de la etiqueta Option que genera ICEfaces.

Mi clase ConvertidorProducto quedó así:



Creamos nuestro managed bean de tipo request en mi caso lo llame TemplateClient al igual que el xhtml de la siguiente manera:



Luego se debe registrar nuestro convertidor en faces-config.xml de nuestro proyecto quedando así:


Luego desarrollamos el archivo, en mi caso, template-client.xhtml de la siguiente manera


Y por ultimo deployamos el proyecto que se verá así:


Adjunto el proyecto para que pueda ser estudiado.

Comentarios (3)

3 Response to "ICEfaces: Custom Converter"

  1. Fjeno says:
    martes, octubre 13, 2009

    gracias por tú ejemplo, funciona re bien, tuve que cambiar los EM por sesiones de hibernate, pero lo adapte y funciona muy bien! con el dao y con el selectonemenu

    PERO! al seleccionar no cambia el outputtext según el valo que quiero, me di cuenta que tú código en la variable elegido que consume product tiene seteado el array productos[] como 0 por lo cual siempre trae la ubicación 0

    a mi no me cambia el outputtext al seleccionar otro valor en el selectonemenu

    sabes cómo solcuioanr eso ??

    agradecería mucho tú ayuda

    (fjeno.m@gmail.com)

  2. Daniel Alberto says:
    jueves, octubre 15, 2009

    @Fjeno:

    En el campo "elegido" lo setee al primero elemento para que estuviera así elegido por defecto.

    El ejemplo deberia de funcionarte bien, si no se actualiza el outputText es por que quizas no le has puesto el atributo "partialSubmit" al selectOneMenu, revisa eso.

    Saludos.

  3. Fjeno says:
    domingo, septiembre 12, 2010

    Ufaa hare una pregunta aun comentario muy antiguo.

    Esta clase converter funciona con LONG ??? o sólo es aplicable para int?

    Saludos!