Top Posts

Série Git:Instalando e configurando Git no Ubuntu

Continue lendo

selectOneMenu JSF com BD

Posted by camilolopes | Posted in JSF | Posted on 19-07-2010

12

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:

  1. 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.

  1. Não esqueça de criar uma tabela no seu banco de dados. Aqui chamamos ela de cargo

Desenvolvendo

  1. Na sua classe DAO, crie um método que vai retornar todos cargos cadastrados:

  2. Na ControllerCargo você deve ter o método e a variável abaixo.

  3. Essa aqui é nossa classe cargo:

  4. 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>

<input jsfc=”h:selectOneMenu” value=”#{controllerUser.usuario.funcao}” >

<f:selectItems value=”#{controllerCargo.cargos}” />

</input>

    Erro comum

    1. 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.

    selectonebdjsf

    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.

    Related Posts with Thumbnails

    Comments (12)

    Excelente artigo, estive trabalhando com jsf e a biblioteca de componentes richfaces recentemente para o meu projeto final da faculdade, várias vezes me deparei com este problema, depois de algumas pesquisas percebi que realmente existem várias formas de fazer como você mesmo citou.

    No mais gostaria de parabenizá-lo por seu trabalho no blog, acompanho o feed dele a algum tempo e sempre estou lendo os posts porque sei que o contéudo é de qualidade.

    Post muito legal Camilo, parabens

    opa! pessoal! eu que agradeço a voces pelo feedback, obrigado mesmo.

    Olá camilo, eu estou tendo problema com algo relacionado…

    eu preencho normalmente um compo porém quando este primeiro for preenchido, auitomaticamente um segundo combo é preenchido.. ( usei o rerender no primeiro combo ) porem quando vou gravar no banco os dados dos 2 combos, eles cao como nulos sendo que foram preenchidos na interface… se pudesse me ajudar eu ficaria muito agradecido.

    e aproveitando quero lhe dar os parabéns pois seu blog java é o unico que eu realmente leio e me chamou a atenlçao… parabens

    olá Kelson,
    pelo que eu entendi do seu problema o que pode está acontecendo é que o seu controller não está pegando os dados preenchido e passando para as variaveis do bean, veja se usou o managebean correto, se os valores nao estao sendo reinciando em algum momento. Eu ja passei por algo parecido e o meu problema estava no controller com a pagina jsf, onde as informacoes nao estavam relacionadas. Lembre-se que o que será persistindo é um objeto pelo ORM que contem as info do bean que nada mais é a nossa table.

    pow obrigado pelo elogio ao blog! fico feliz que ele tenha chamado atenção.. hehe
    abracos, 😀

    muito bom mesmo cara!! Valeu!!! sou iniciante em JSF e este post me ajudou muito.
    Parabéns.
    abraços,

    Muito Obrigado!
    reemcontrei este tutorial, ele me ajudou muito em 2011 –vlw mesmo!

    Camilo,
    Excelente exemplo, deve ser de grande utilidade para todos.

    Mas como eu acessaria o ID do cargo para Armazenar no BD do formulario do Usuário ?

    Alguma coisa parecida com isso:
    var=”tipo” itemValue=”#{tipo.codigo}”/>
    Para que a variável indicada no SelecOneMenu receba o tipo.codigo e nao o nome:
    value=”#{controllerUser.usuario.id}” >

    Terias alguma idéia para isso ???

    Só para esclarecer a dúvida anterior:
    Quiz dizer mostrar a FUNCAO como no exemplo, mas retornar o ID da função para o bean.ID e poder gravar apenas o ID da funcao na tabela de usuarios ???

    Claudio,

    Sim, pode ter. depende de como está o relacionamento, entre as entidades. Você pode ter o id do cargo na tabela usuário, mas também, vc pode ter o id do usuário na tabela do cargo. Há regras de negocio que dizem que um usuário não pode ter mais de um cargo, porém um cargo pode ter mais de 1 usuário.

    olá Claudio,

    O relacionamento entre Usuario e Cargo que fará vc ter o ID do cargo na tabela do Usuário. Pense olhando para relacionamento e não para formularios. Uma vez que o relacionamento está correto para o deseja, é so adaptar no front-end. Nesse exemplo eu não entrei no relacionamento das entidades, até pq elas não estão relacionadas.
    Para receber o código do usuário seria algo assim como vc falou.

    Perfeito. Meus parabéns…

    Write a comment