JSF utilizando o SelectOneMenu de maneira fácil
Um das principais fontes de dúvida para quem está começando a aprender JSF é o componente SelectOneMenu. Basta uma simples garimpada no google e você confirmará isso. Diversas soluções para o uso do SelectOneMenu são indicadas, uma das que mais vejo é utilizar um converter para converter o objeto selecionada na SelectOneMenu no objeto desejado. Porém eu prefiro uma maneira que acho mais simples, que irei mostrar a seguir.
No nosso exemplo, terei um objeto do tipo “Classe” que representará uma classe de alunos, cada classe contem um objeto do tipo “Professor”. Ao cadastrar uma classe o usuário deverá selecionar o professor em uma determinada lista. Então vamos lá:
Teremos um backing bean chamado ClasseBean que conterá uma objeto do tipo classe.
public class ClasseBean {
private Classe classe;
private ClasseDao classeDao;
private List<SelectItem> listaItem;
private int professorSelecionado;
public ClasseBean() {
classe = new Classe();
classeDao = new ClasseDao();
listaItem = getLista();
}
public List<SelectItem> getLista() {
ArrayList<SelectItem> lista = new ArrayList<SelectItem>();
ProfessorDao professorDao = new ProfessorDao();
List<Professor> resultado = (List<Professor>) professorDao.listAll();
for (Professor teste : resultado) {
SelectItem item = new SelectItem(teste.getId(), teste.getNome());
lista.add(item);
}
return lista;
}
public String salvar() {
ProfessorDao professorDao = new ProfessorDao();
professor = professorDao.procurar(professorSelecionado);
this.classe.setProfessor(professor);
classeDao.salvar(classe);
classe = new Classe();
return "listarClasses";
}
//métodos getters e setters omitidos
}
No exemplos não irei me apegar a camada de persistência, devendo essa ter sido criada previamente pelo programador e conter os métodos de busca pelo ID e buscar todos os registros.
Iremos começar pelo método getLista(), nesse método é criado uma lista de SelectItem que será usada como exibição, os objetos SelectItem recebem como parametro no construtor dois atributos, o primeiro é a chave do selectItem (que será igual ao id do professor) e o valor de exibição (que no nosso caso será o nome do professor).
Já o método salvar() utilizar o ProfessorDao para efetuar uma busca através do atributo professorSelecionado (o valor desse atributo será igual a chave do item escolhido no SelectOneMenu, que no nosso caso será o id do professor. Lembra-se do: “SelectItem item = new SelectItem(teste.getId(), teste.getNome());” ) após isso o atributo professor do objeto Classe é setado e o o objeto é persistido.
Agora iremos para a criação da página jsf:
<h:selectOneMenu value="#{classeBean.professorSelecionado}">
classeBean.listaItem}">
<f:selectItems value="#{classeBean.listaItem}"/>
</h:selectOneMenu>
O atributo value do SelectOneMenu recebe como parametro o atributo que receberá o valor da chave do atributo selecionado da lista.
E utilizamos o selectItems para informar em qual atributo está a lista de SelectItem’s a ser exibida.



Soh nos BEAN. Olha o surf brow
Post Maravilhoso, so gostaria de saber onde estar todo o código para baixar e rodar ? ou é somente um fraguimento !?
Grande abraço e valeu !