JSF proporciona una serie de conversores estándar a través de sus librerías de acciones, a la par que permite definir conversores propios por parte de las aplicaciones.

El propósito es convertir la información introducida en el cliente, en formato de texto a través de un formulario, a su correspondiente tipo dentro de un bean. Y convertir la información de los beans en el servidor a su correspondiente representación en modo texto para el cliente.

Estándar
Los conversores estándar de JSF se encuentran definidos dentro del paquete javax.faces.convert, y sus nombres son lo suficientemente intuitivos como para saber que tipo convierte cada uno de ellos:

NumberConverter
DateTimeConverter
ShortConverter
LongConverter
IntegerConverter
BigIntegerConverter
FloatConverter
DoubleConverter
BigDecimalConverter
BooleanConverter
CharacterConverter
ByteConverter
EnumConverter

Para especificar que conversor utilizar dentro de un componente de forma explícita se utiliza el atributo converter:

No obstante, esto no hace falta en la mayoría de los casos, pues los conversores se aplican automáticamente en función del tipo de valor asociado a cada componente.

NumberConverter y DateTimeConverter
Sólo dos de los conversores estándar están asociados a acciones y pueden utilizarse mediante un tag: NumberConverter y DateTimeConverter.

La acción NumberConverter admite atributos que permiten especificar el detalle con el que tiene que representarse una cantidad:

La acción DateTimeConverter admite atributos que permiten especificar el detalle con el que tiene que representarse una fecha:

Además de los mostrados en los ejemplos, las acciones admiten otros atributos más que pueden consultarse en la documentación oficial de referencia.

Binding
De igual forma que se explicó para los validadores, se puede definir una propiedad dentro de un bean que actúe como conversor personalizado:

Y utilizando las facilidades de binding de JSF, usarlo en un componente:

Converter
JSF permite a las aplicaciones implementar sus propios conversores. Un conversor es una clase que implementa la interface Converter.

Un conversor se declara realizando la configuración correspondiente dentro del fichero faces-config.xml, o de forma mucho más comoda utilizando la anotación @FacesConverter en la clase que lo implementa:

La anotación @FacesConverter admite dos atributos. El atributo value que permite especificar un nombre identificador para el conversor. Y el atributo forClass que permite especificar el nombre de una clase. Si se indica el nombre de una clase entonces JSF utilizará automáticamente el conversor para los objetos de dicha clase.

La interface Converter obliga a implementar dos métodos. El método getAsString para convertir el objeto a texto. Y el método getAsObject para convertir texto en el objeto:

Para utilizar un conversor propio dentro de un componente se tiene que utilizar la acción f:converter utilizando su identificador:

Un conversor puede decidir elevar una excepción si una determinada conversión no puede realizarse, y añadir los mensajes de error oportunos al contexto.