JSF - SelectItem

1 resposta
ricardocomp

Olá pessoal,
eu tenho um método aqui e gostaria
de saber melhor como o SelectItem funciona,
o meu método apenas lista os nomes dos
Técnicos armazenados no banco de dados
em um ComboBox do JSF.

public List<SelectItem> getTecnicosCombo(){
        TecnicoServices tecnicoServices;
        this.tecnicosCombo  = new ArrayList<SelectItem>();

        tecnicoServices = new TecnicoServices();
        try {

            for(Tecnico tec: tecnicoServices.listarTecnicos()){
                this.tecnicosCombo.add(new SelectItem(String.valueOf(tec.getIdTecnico()), tec.getNome()));
            }

        } catch (LAFQADaoException ex) {
            ex.printStackTrace();
        }

        return this.tecnicosCombo;
    }

O método está funcionando direitinho, mas
gostaria de saber se o SelectItem nessa linha:

SelectItem(String.valueOf(tec.getIdTecnico()), tec.getNome())

ele pega os id dos técnicos e converte para String e pega
os nomes do técnicos com o getNome, o SelectItem associa
uma String a um valor? no meu combo aparece apenas os nomes
mas porque eu tenho que associá-los ao seu id no banco?

Será que alguém poderia me dar uma ajuda?

[]'s.

1 Resposta

J

Opa,

cara, o componente <f:selecitems /> do core da jsf serve como data source para teus componentes de lista.
Então, o atributo value deste componente, chama o método que retorna os dados(List<SelectItem>) para popular tua combo(exemplo).
O <f:selecitems /> deve ter como pai um component(<tr:selectManyListbox/> do trinidad ou um da própria jsf <h:selectOneListbox/>, etc) que é quem realmente renderiza o “select” em HTML.

Tem um probleminha nesse teu codigo… se tu colocar um break point no teu método getTecnicosCombo, vai ver que ele é chamado mais de uma vez no mesmo request(em diferentes fases da JSF), executando várias vezes a consulta. Como solução para isto, coloque essa coleção como variável de instância, e controle se ela já está populada… para não fazer mais de uma vez a consulta.

Abraço

Criado 23 de dezembro de 2009
Ultima resposta 23 de dez. de 2009
Respostas 1
Participantes 2