Criando Converter

Boa tarde a todos;
Eu estou iniciando os estudos em JSF, e estou com problemas para entender o conceito e a lógica do funcionamento de um CONVERTER, para ser utilizado em combo box do criado no Prime face. Se possível gostaria de um exemplo comentado de como criar um conversor. Dês de já agradeço a atenção de todos…

Olá thiago!

Converters servem para converter (rs) objetos para String e vice-versa. Justamente para mostrar objetos complexos em selectLists, combobox, textField etc.

Pra criar um converter crie uma classe que implemente a interface Converter e implemente os dois métodos da interface

getAsObject recebe uma string, é seu papel indicar, nesse método, como transformar essa string em um objeto
getAsString faz o contrário, ele recebe um objeto, e você deve indicar como transformá-lo em uma string

Por exemplo, tenho uma tabela que guarda o ano/mês no formato yyyyMM (exemplo: 201302), mas na tela gostaria de mostrar em um formato mais amigável (02/2013). Meu converter ficaria assim:

@FacesConverter("anoMesConverter")
public class AnoMesConverter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent arg1, String str) {
		Integer anoMes;
		
		try {
			anoMes = Integer.valueOf(str.substring(5, 7) + str.substring(0, 2));
		} catch (Exception e) {
			throw new ConverterException(e);
		}
		
		return anoMes;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object obj) {
		String mesAnoFormatado;
		
		try {
			String anoMesStr = obj.toString();
			if(Integer.valueOf(anoMesStr)==999912){
				mesAnoFormatado="Atual";
			}else
			mesAnoFormatado = anoMesStr.substring(4, 6) + "/" + anoMesStr.substring(0, 4);
		} catch(Exception e) {
			throw new ConverterException(e);
		}
		
		return mesAnoFormatado;
	}

}

Depois utilizo ele na tela assim:

<h:outputText value="#{meuBean.anoMesInicio}">
    <f:converter converterId="anoMesConverter" />
</h:outputText>

Espero ter ajudado.

seria bom informar a classe tmbm

@FacesConverter(forClass = java.util.Date.class, value = "conversor")

Opa…
Cara ajudo demais mesmo, irei colocar em pratica para ver o que vai dar.
Vamos ver o que vai dar rsrsrsrrsrs… :lol:

esse post explica o problema e para que o converter é necessário: JSF: Converter e Bean Auto Complete