Como Utilizar SelectOneMenu do JSF?

2 respostas
Richard_Mendes_Madur

Olá Pessoal!
Estou aprendendo JSF e ao tentar utilizar o SelectOneMenu, tive apenas sucesso utilizando Strings como Argumentos para os Parâmetros do SelectItem
Fiz assim:

public class Filho {
    private Long id;
    private String nome;
    private String telefone;
    ...
}

meu Bean:

private Class MeuBean{
    private String filhoEscolhido;
    public Collection<SelectItem> getListaFilhos(){
        Collection<SelectItem> listaRetorno = new ArrayList<SelectItem>();
        for(Filho filho: pai.getFilhos()){
            SelectItem item = new SelectItem(filho.getNome(), filho.getNome());
            listaRetorno.add(item);
        }
        return listaRetorno;
    }
}

e no meu jsp:

<h:selectOneMenu value="#{meuBean.filhoEscolhido}">//filhoEscolhido é uma String
    <f:selectItems value="#{meuBean.listaFilhos}"/>//Aqui, listaFilhos é uma Collection<SelectItem> com os selectItems criados utilizando a construtora new SelectItem("Nome Completo", "nome");
</h:selectOneMenu>

Do jeito acima funcionou, porém não é o que eu quero.
Eu queria fazer o seguinte:
trocar o tipo da referencia do objeto “filhoEscolhido” de String para o tipo “Filho”. Assim:

e trocar a forma com que eu instancio o SelectItem para a seguinte maneira:

Só que isso NÃO FUNCIONOU!
Gostaria de saber se há como fazer algo parecido com o código acima, ou seja:
1- O tipo do propriedade “value” da tag <h:selectOneMenu> só pode ser uma String? Gostaria que, nesse caso, fosse do tipo “Filho”.
2 - Quero escolher uma opção do combobox gerado, e automaticamente atribuir a opção escolhida a variável de referencia “filhoEscolhido” do tipo “Filho”.

Desde já agradeço!
Valeu!

2 Respostas

rponte

Olá Richard,

O atributo value do componente h:selectOneMenu poderá ser qualquer tipo de objeto, desde String, Wrappers (Integer, Double etc) e qualquer outro objeto que você desejar. Contudo, ao se trabalhar com objetos customizado (entidades por exemplo) você necessitará criar um converter para seu componente. Acredito que você não conheça sobre converters, logo eu te aconselharia de cara entende-lo através deste artigo,
http://www.ibm.com/developerworks/java/library/j-jsf3/

Depois de entendido o que é um converter, eu partiria para uma solução mais elaborada ao se trabalhar com entidades e converter, sendo, uma lida no post abaixo vale a pena,
http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/

Abraços e boa sorte.

Richard_Mendes_Madur

Como inicieu meu aprendizado em JSF a pouco tempo, ainda não havia olhado os converters.
Vaou dar uma lida nos links que você sugeriu.
Obrigado!
Valeu!

Criado 16 de agosto de 2008
Ultima resposta 17 de ago. de 2008
Respostas 2
Participantes 2