EJB, JPA e JSF: uma amizade possível - Parte 1
Dando sequência ao trabalho de criação de uma rede social usando JSF 2, EJB 3.1 e JPA 2, implementaremos a funcionalidade de envio de mensagens entre amigos para a rede social Java Friends.
Para que serve:
Durante o artigo, teremos a oportunidade de estudar o importante método EntityManager.find(), que permite executar buscas em bancos de dados de maneira eficiente e prática a partir de chaves primárias. Veremos também como trabalhar com relações 1-para-N em JPA, algo necessário em praticamente qualquer aplicação não trivial. Além disto, conheceremos alguns componentes JSF úteis para facilitar a seleção de um valor a partir de uma lista predeterminada, como se faz com a tag <select> de HTML.
Em que situação o tema é útil:
Frequentemente, uma aplicação deve pedir ao usuário que selecione um valor dentre vários já conhecidos previamente. É comum termos de recuperar dados de um banco de dados a partir de uma chave primária – o que é eficiente, também. Por fim, relacionamentos 1-para-N são necessários em inúmeras modelagens de bancos, e o desenvolvedor que utiliza JPA deve saber como lidar com eles.
Resumo DevMan:
Após implementar toda a lógica necessária para que a rede social Java Friends pudesse registrar usuários e os relacionamentos entre eles, vamos acrescentar a funcionalidade de enviar mensagens. Através desta funcionalidade, aprenderemos novos aspectos das tecnologias estudadas, tais como: persistir relações 1-para-N em JPA, apresentar listas para que o usuário selecione um item, a maneira mais prática e eficiente de recuperar uma entidade a partir da sua chave primária, etc. Além disto, teremos a oportunidade de rever outros conceitos, para firmá-los ao fim desta série de artigos.
No artigo EJB, JPA e JSF: uma amizade possível, criamos uma infraestrutura e um ambiente de desenvolvimento para as tecnologias EJB, JPA e JSF usando Eclipse e GlassFish v3. Posteriormente, no artigo EJB, JPA e JSF: uma amizade consolidada, implementamos a lógica de negócio de uma rede social, de modo que os usuários podiam adicionar pessoas à lista de amigos. Como agora os usuários têm amigos de fato, vamos implementar a capacidade de enviar mensagens entre amigos.
Ao implementar o envio de mensagens, revisaremos o padrão Data Access Object, pois, como será necessário gerenciar mensagens no banco de dados, criaremos uma classe DAO responsável por esta tarefa. Como outras classes precisarão de uma instância deste DAO, veremos novamente como fornecer este objeto através de injeção de dependências via EJB. Veremos também como recuperar atributos de um bean gerenciado a partir de outro, uma vez que será necessário trocar informações entre beans gerenciados.
Além de revisar o que já estudamos, aprenderemos como persistir relações 1-para-N em JPA e conheceremos o método find() da interface EntityManager, que permite recuperar objetos de maneira muito prática e eficiente a partir de chaves primárias. Estudaremos novos componentes JSF, usados para listar dados a serem selecionados – no nosso caso, através de um elemento <select>. Ao final, seremos apresentados a uma funcionalidade muito útil de JSF 2, a navegação implícita, que torna o processo de definição de regras de navegação muito menos burocrático.
Apresentando mensagens
Desde o começo, um requisito foi definido como obrigatório para nossa rede social: permitir que amigos trocassem mensagens entre si. É para isto, por exemplo, que criamos a entidade Mensagem. Agora que a lógica para registrar amizades entre usuários está pronta, podemos implementar esta funcionalidade.
Comecemos pelo passo mais simples: apresentar as mensagens recebidas ao usuário. Por questões de praticidade, vamos listar as mensagens na tela principal da aplicação. Portanto, adicionaremos um <div> no facelet principal.xhtml, logo abaixo da listagem de amigos, contendo também um título:
<div id="mensagens-recebidas">
<h2><h:outputText value="Mensagens recebidas" /></h2>
Dentro do <div> listaremos as mensagens em um elemento <ul>. Para fazê-lo, utilizaremos o componente <c:forEach> da JSTL, que iterará sobre todas as mensagens recebidas da pessoa autenticada. Este componente pode ser usado de várias maneiras, mas a que nos interessa é a mesma mostrada na seção “Listando amigos utilizando a biblioteca de tags JSTL” do segundo artigo, em que passamos ao atributo items da tag <c:forEach> um objeto iterável, e acessaremos cada um dos seus elementos através de uma variável cujo nome será passado ao atributo var. Para a situação atual, o objeto iterável é a lista de mensagens recebidas pelo usuário autenticado. O nome da variável pode ser qualquer um, mas “mensagem” é uma escolha natural.
<ul>
<c:forEach items="#{autenticacaoBean.pessoaAutenticada.mensagensRecebidas}" var="mensagem">
Dentro de <c:forEach> escreveremos o conteúdo que deve ser repetidamente adicionado à tela. No nosso caso, para cada mensagem, acrescentaremos um item <li> na lista <ul> previamente aberta. Cada um destes itens apresentará o título, o nome do remetente e o conteúdo da mensagem, como mostrado abaixo:
<li>
<strong><h:outputText value="#{mensagem.titulo}" /></strong><br />
<small><h:outputText value="Enviada por #{mensagem.remetente.nome}" /></small><br/>
<h:outputText value="#{mensagem.conteudo}" />
</li>
...
Confira outros conteúdos:
Perguntas frequentes
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.