olá Pessoal,
Hoje vou mostrar como criar preencher um selectOneMenu com dados vindo do Banco de Dados. Há várias formas de fazer isso, no blog o rponte você vai ver alguns posts bem interessante sobre o assunto. Vou mostrar abaixo como deixar seu selectOneMenu dinâmico pegando os dados do BD.
Tive como referência o livro do autor Edson Gonçalves em seu livro Dominando JSF.
lets go…
Posts Recomendados
Note: Para o exemplo a seguir usei o Hibernate puro para persistência e o TomCat 6 como servidor.
Preparando o ambiente:
-
crie seu projeto JSF e sua página jsp ou xhtml
Aqui vamos usar xhtml, mas nada impede de usar .jsp o código JSF não vai mudar se vc criou um dos dois arquivos acima.
-
Não esqueça de criar uma tabela no seu banco de dados. Aqui chamamos ela de cargo
Desenvolvendo
-
Na sua classe DAO, crie um método que vai retornar todos cargos cadastrados:
//retorna todos os cargos cadastrados public List listaCargo(){ Query query = getSession().createQuery("from Cargo"); Listlista = query.list(); return lista; }
-
Na ControllerCargo você deve ter o método e a variável abaixo.
public class ControllerCargo { private Cargo cargo; private Map cargoitem=null; private ListDataModel model; public ControllerCargo() { cargo = new Cargo(); } //outros codes foram omitidos, pois não tem importância para o objetivo do post //será armazenado no selectOneMenu public Map getCargos(){ CargoDAO cargodao = new CargoDAO(); cargoitem = new LinkedHashMap(); for(Iterator iter =cargodao.listaCargo().iterator();iter.hasNext();){ Cargo c = (Cargo) iter.next(); //armazenando os cargos encontrados no bd em um map cargoitem.put(c.getFuncao(), c.getFuncao()); } return cargoitem;}
-
Essa aqui é nossa classe cargo:
public class Cargo { private int id; private String funcao; private String area; //gets/sets omitidos
- criamos uma página em xhtml (poderia ser em JSP) que tem o selectOneMenu carregado com os cargos que estao na tabela no BD, veja como ficou o code:
<input jsfc=”h:selectOneMenu” value=”#{controllerUser.usuario.funcao}” >
<f:selectItems value=”#{controllerCargo.cargos}” />
</input>
Erro comum
-
um erro comum é não prestar atencao no S que temos entre selectItems e seletecItem, se vc deixar no singular, terá problemas ao executar a página. Afinal de contas você informou que vai receber uma coleção de dados.
Teste
Veja abaixo o exemplo do selectOneMenu pegando informações que vem do BD. temos um formulário e logo a seguir um select do banco de dados.
Vou ficando por aqui pessoal e até a proxima, espero que tenham gostado, o objetivo aqui foi apresentar um ponto bem especifico, por isso não coloquei todo o código para não perder o foco. Até porque nada mudou nas outras classes.
Abracos, see you next post.