Desenvolvimento para WEB II
Prof. Roberto Alencar
Roteiro O que veremos nesta aula ? ➔
Listando registros no projeto com Spring MVC
➔
Elaborando um filtro de pesquisa na tela de listagem
Listagem e Filtro de Pesquisa com Spring MVC
Spring MVC - Listagem Listando registros no projeto ➔
➔
Como já conseguimos adicionar produtos em nossa aplicação, precisamos saber o que foi adicionado. Para isso, precisamos criar uma funcionalidade que lista os produtos. É necessário primeiramente implementar o método listar da classe ProdutoDao para conseguir a lista dos produtos que estão no banco de dados:
public List listar() { EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); EntityManager manager = factory.createEntityManager(); List lista = manager.createQuery("FROM Produto ORDER BY descricao").getResultList(); manager.close(); factory.close(); return lista; }
Spring MVC - Listagem Listando registros no projeto ➔
Após criarmos o método listar em ProdutoDao, implemente o método listar dentro da classe ProdutoController:
@RequestMapping("/produto/list") public String listarProduto() { ProdutoDao dao = new ProdutoDao(); List listaProduto = dao.listar(); return "produto/listarProduto";
}
Spring MVC - Listagem Listando registros no projeto ➔
➔
➔
Essa lista de produtos deverá ser disponibilizada para o JSP fazer sua exibição. Para que possamos disponibilizar um objeto para o JSP, temos que alterar o retorno do método lista. A ideia é que o Spring MVC não só retorne o nome da página JSP ( produto/listarProduto ) quando chama o método listarProduto, o Spring MVC pode retornar também dados para o JSP. Os dados para a exibição na tela e o nome da página JSP foram encapsulados pelo Spring MVC em uma classe especial que se chama ModelAndView.
Spring MVC - Listagem Listando registros no projeto ➔
Vamos criar um objeto do tipo ModelAndView e preencher esse modelo com nossa lista de produtos e definir o nome da página JSP. O método lista deve retornar esse objeto, não mais apenas um String. Veja como fica o código:
@RequestMapping("/produto/list") public ModelAndView listarProduto() { ProdutoDao dao = new ProdutoDao(); List listaProduto = dao.listar(); ModelAndView mv = new ModelAndView("produto/pesquisarProduto" ); mv.addObject("listaProduto", listaProduto); return mv; }
Spring MVC - Listagem Listando registros no projeto ➔
➔
Dessa forma, será disponibilizado para o JSP um objeto chamado listaProduto que pode ser acessado via Expression Language como ${listaProduto} . Poderíamos em seguida iterar sobre essa lista utilizando a Tag forEach da JSTL core.
Spring MVC - Listagem Listando registros no projeto ➔
➔
➔
➔
Observando o código do método listarProduto pode parecer estranho instanciar uma classe do framework Spring ( ModelAndView ) dentro do nosso controlador. Isso até influencia negativamente a testabilidade do método. Por isso, O Spring MVC dá uma outra opção, oferece uma alternativa ao uso da classe ModelAndView . No nosso método podemos receber um objeto que representa o modelo para o nosso JSP. Spring MVC pode passar um parâmetro para o método do controlador que tem a função do modelo.
Spring MVC - Listagem Listando registros no projeto ➔
Esse modelo podemos preencher com a lista de produtos. Assim também continuaremos retornar uma String como retorno do método que indica o caminho para o JSP:
@RequestMapping("/produto/list")
public String listarProduto(Model model) { ProdutoDao dao = new ProdutoDao(); List listaProduto = dao.listar(); model.addAttribute("listaProduto", listaProduto); return "produto/pesquisarProduto"; }
Spring MVC - Listagem Listando registros no projeto ➔
Altere o JSP listarProduto.jsp para que este utilize a lista enviada pelo Controller na tag com expression language:
Listar Produto Código Descrição ... ${produto.codigo} ${produto.descricao} ...
Spring MVC - Listagem Enviando mensagens para o JSP ➔
Através da classe Model do Spring MVC também é possível passar mensagens de sucesso ou erro para o JSP:
@RequestMapping("/produto/save") public String save(Produto produto, @RequestParam("file") MultipartFile imagem, Model model) { if (Util.fazerUploadImagem(imagem)) { produto.setImagem(Util.obterMomentoAtual() + " - " + imagem.getOriginalFilename()); } ProdutoDao dao = new ProdutoDao(); dao.salvar(produto); model.addAttribute("mensagem", "Produto Incluído com Sucesso"); return "produto/incluirProduto"; }
Spring MVC - Listagem Enviando mensagens para o JSP ➔
No arquivo JSP basta apenas utilizar Expression Languagem para exibir a mensagem:
... Incluir Produto ${mensagem} Código ...
Aplicando Filtro de Pesquisa
Spring MVC – Filtro de Pesquisa Implementando filtro de pesquisa ➔
Implemente um filtro para a tela de listagem de Produtos:
Spring MVC – Filtro de Pesquisa Implementando filtro de pesquisa ➔
Desta forma, o código do JSP do filtro ficaria:
... Filtro Produtos Código Descrição Limpar Filtrar Lista Produtos ...
Spring MVC – Filtro de Pesquisa Implementando filtro de pesquisa ➔
Implemente o método ProdutoController:
filtrarProduto
em
@RequestMapping("/produto/filter") public String filtrarProduto(Produto produto, Model model) { ProdutoDao dao = new ProdutoDao(); List listaProduto = dao.listar(produto); model.addAttribute("listaProduto", listaProduto); return "produto/listarProduto"; }
Spring MVC – Filtro de Pesquisa Listando registros no projeto ➔
Ajuste o método listar na classe ProdutoDao:
public List listar(Produto produto) { EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); EntityManager manager = factory.createEntityManager(); Query query = null; String codigo = produto != null ? produto.getCodigo() : ""; String descricao = produto != null ? produto.getDescricao() : ""; if (!codigo.equals("") && descricao.equals("")) { query = manager.createQuery("FROM Produto WHERE codigo LIKE :paramCodigo ORDER BY descricao"); query.setParameter("paramCodigo", "%" + codigo + "%"); } else if (codigo.equals("") && !descricao.equals("")) { query = manager.createQuery("FROM Produto WHERE descricao LIKE :paramDescricao ORDER BY descricao"); query.setParameter("paramDescricao", "%" + descricao + "%"); } else if (!codigo.equals("") && !descricao.equals("")) { query = manager.createQuery( "FROM Produto WHERE codigo LIKE :paramCodigo AND descricao LIKE :paramDescricao ORDER BY descricao"); query.setParameter("paramCodigo", "%" + codigo + "%"); query.setParameter("paramDescricao", "%" + descricao + "%"); } else { query = manager.createQuery("FROM Produto ORDER BY descricao"); } List lista = query.getResultList(); manager.close(); factory.close(); return lista; }
Spring MVC – Filtro de Pesquisa Listando registros no projeto ➔
Tela de listagem com o filtro implementado:
Dúvidas
Exercícios Implemente no Projeto Spring MVC criado na aula anterior: 1) Implemente a tela de listagem de produto com opções de filtro da listagem.
Obrigado pela Atenção ! Até a próxima aula.
Prof. Roberto Alencar
[email protected]