Conversão JSF

Caros colegas,

Estou utilizando JSF na camada de apresentação e a situação é a seguinte:

Tenho uma classe, cujo um dos atributos está persistido no banco como char[1]. Este atributo armazena um caractere que representa o tipo do objeto. Por

exemplo:

caractere ‘f’ representa = “Telefone fixo”
caractere ‘c’ representa = “Celular”
e assim vai…

Fiz o formulário de cadastro utilizando uma lista de selectItem no meu managed bean e no meu jsp a tag JSF <f:selectItems>. Funcionou perfeitamente.
Minha dúvida é na página que lista os dados.
Os valores do atributo “tipo” é mostrado como está persistido no banco (char[1]).
Existe alguma maneira através do jsf para que ele converta os valores e os mostre de forma completa.

Segue as fontes…

Bean

public class PontoControle {

private Integer id;
private String descricao;
private char tipo;

//get e set omitidos
	
}

ManagedBean

//inicio do codigo omitido
public List<SelectItem> getListaTipos() {
	List<SelectItem> listaTipos = new ArrayList<SelectItem>();
	listaTipos.add(new SelectItem('f', "Telefone Fixo"));
	listaTipos.add(new SelectItem('c', "Telefone Celular"));
	return listaTipos;
}

fomulario cadastro jsf

//inicio do codigo omitido
	<h:outputText value="Tipo" />
	<h:selectOneMenu id="tipo" value="#{pontoController.ponto.tipo}">
		<f:selectItems value="#{pontoController.listaTipos}" />
	</h:selectOneMenu>

pagina que lista os dados persistidos

//inicio do codigo omitido
<h:dataTable value="#{pontoController.todos}" var="item" border="1">
	<h:column>
		<f:facet name="header">
			<h:outputText value="Código" />
		</f:facet>
		<h:outputText value="#{item.id}" />								
	</h:column>
			
	<h:column>
		<f:facet name="header">
			<h:outputText value="Descrição" />
		</f:facet>
		<h:outputText value="#{item.descricao}" />
	</h:column>

	<h:column>
		<f:facet name="header">
			<h:outputText value="Tipo" />
		</f:facet>
		<h:outputText value="#{item.tipo}" />
	</h:column>
</h:dataTable>

Desde já… obrigado!

Nesse caso como são duas opções dá para optar por uma solução simples

<h:outputText value="#{item.tipo == f ? Telefone Fixo : Telefone Celular}" />   

Thiago,

Este que postei foi apenas um exemplo.

O atributo “tipo” teria vários possíveis valores.

Uma possível solução seria utilizar enum

Acho que a forma mais fácil é usar um conversor, mas seria interessante usar um enum como o colega mencionou. Ou seja:

public enum EnumTipo {
A,
B,
C
}

public class ConverterEnum implements Converter {

	public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
		if ( arg2==null || arg2.length()==0 ) return null;
        return EnumTipo.valueOf(arg2);
	}

	public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
         return arg2.toString();
	}

}

Claro que você tem também a opção de não usar enum, só que teria que fazer uma macarronada de if/else dentro dos códigos getAsObject e getAsString…