SelectOneMenu com valores Integer mas visualizando String

Pessoal,
Eu tenho uma entidade, mapeada pelo Hybernate, com uma propriedade que é Integer. Eu preciso que na camada view (JSF) tenha um SelectOneMenu que mostre as opções: Secretária, Vendedor, Gerente, Diretor, Administrador. Mas que na entidade seja esta propriedade Integer:
1 - Secretária
2 - Vendedor
3 - Gerente
4 - Diretor
5 - Administrador

Alguém poderia dar um exemplo de como implementar isto?

Obrigado.

Alguma razão específica para ser Integer? Se não tiver, eu recomendaria usar enum:

 public  enum Cargos{
  SEC("Secretária"),VEN("Vendedor"),...;

      private String cargo;
     Cargos(String cargo){
         this.cargo = cargo;
     }
}

Como em Java não dá para iniciar identificadores com numero, você não vai conseguir declarar como 1(“Secretária”)

@ozelo,

Eh simples, nessa essa entidade, penso eu, deve ter no mínimo duas propriedades, por exemplo, id e descricao, portanto, o id será seu value e a descricao sera o nome (Secretaria, Vendedor, etc…), Por exemplo:

<h:selectOneMenu value="#{agricultorMB.idEstado}" id="estado"> <f:selectItem itemLabel="SELECIONE" itemValue="0" /> <f:selectItems value="#{estadoMB.listaEstados}" var="estado" itemLabel="#{estado.descEstado}" itemValue="#{estado.idestado}" /> <f:validator validatorId="br.com.sisgappe.view.validation.ComboValidator" /> <p:ajax update="cidade" listener="#{cidadeMB.buscarCidade(agricultorMB.idEstado)}" process="@this" /> <p:message for="estado" /> </h:selectOneMenu>

Onde listaEstados, eh uma lista de entidades.

[]'s

Pessoal,

Eu pensei em usar um Integer pelo motivo de ser mais simples para fazer as permissões nas páginas xhtml. Por exemplo, um botão estara disponivel se a propriedade Nivel (que é a propriedade da entidade) for maior que 3 ("Gerente"), por este motivo que pensei usar Ineteger ao invés de Enum ou uma outra entridade.

Não possível usar um Map para popular um SelectOneMenu?

Obrigado.

Dá sim, basta pegar o mapa e transformar em SelectItem.


public List<SelectItem> getCargosDisponiveis(){
   Map<Integer,String>  cargos = new HashMap<Integer,String> ();
   cargos.put(1, "Secretária");
   cargos.put(2, "Vendedor");
   cargos.put(3, "Gerente");
   List<SelectItem> itens = new ArrayList<SelectItem>();
   
   itens.add(new SelectItem(0, "Selecione..."));
   for(Integer key : cargos.keySet()){
     itens.add(new SelectItem(key, cargos.get(key)));
   }
return itens;
}

Mas acho melhor se você criasse uma entidade Cargo, com id, cargo e levelAcesso, ou algo do gênero.