Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

To com um problema na hora da filtragem de busca de Empresas

Bom, eu fiz dois testes

1 teste:

Fiz um teste pra ver estava buscando realmente o que eu queria.Deu certo, porém o não funcionava por conta da falta da importação da biblioteca taglib, ou seja, so apresentava uma empresa e não mais de uma empresa.

-> SEM A IMPORTAÇÃO DA TAGLIB
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Buscas de Empresas</title>
</head>
<body>

<h3>Busca de empresas</h3>
    <ul>
        <c:forEach var="empresa" items="${empresas}">
            <li>${empresa.id}: ${empresa.nome}</li>
        </c:forEach>
    </ul>

</body>
</html>

2 teste:

Agora eu importei a biblioteca,porém não está apresentando busca de empresas como eu esperava.

IMPORTAÇÃO DA TAG LIB
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Buscas de Empresas</title>
</head>
<body>

<h3>Busca de empresas</h3>
    <ul>
        <c:forEach var="empresa" items="${empresas}">
            <li>${empresa.id}: ${empresa.nome}</li>
        </c:forEach>
    </ul>

</body>
</html>

Alguém poderia me ajudar a resolver esse problema. Obrigado !

7 respostas

vc colocou essa lista de empresas no request?

então, retornaria uma lista de empresas, ou seja, uma response. A procura,que o caso do filtro, é feito por request

coloca o código da sua servlet

BuscarEmpresas.java

package br.com.alura.gerenciador.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Empresa;
import br.com.alura.gerenciador.dao.EmpresaDAO;

@WebServlet("/busca")
public class BuscaEmpresas extends HttpServlet {


    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("Inicializando a Servlet " + this);
    }

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("   Instanciando uma Servlet do tipo BuscaEmpresa "+ this);


        resp.setContentType("text/html");// ContentType-> Tipo de conteudo-> o tipo de conteudo q vai ser retornado para a pessoa.Nesse caso um html

        PrintWriter ptw = resp.getWriter();
        String filtro = req.getParameter("filtro");
        Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);// Eu pedi a coleção de Empresa. Logo eu chamei junto a funcao de buscaPorSimilares(). Dentro do paramentro colocamos algo com  DE PROCURA
        try{
            Thread.sleep(10000);
        }catch(InterruptedException e){
            e.printStackTrace();
        }

        //ptw.print("<html>");
        //ptw.print("<head>");
        //ptw.print("<body>");
        //ptw.print("<h1> <b>Busca empresas</b> </h1>");

        for (Empresa empresa : empresas) { // ForEach para cada empresas me mande CADA EMPRESA
          //ptw.print("<li> ID:"+empresa.getId()+"  Empresa:"+empresa.getNome()+ "</li>");//Cda empresa tem uma ID e um NOME

            req.setAttribute("empresa",empresa);
            RequestDispatcher dispacher = req.getRequestDispatcher("/WEB-INF/paginas/BuscarEmpresas.jsp");
            dispacher.forward(req, resp);

        }

        //ptw.print("</body>");
        //ptw.print("</head>");
        //ptw.print("</html>");




    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("Destruindo a Servlet " + this);
    }

}

repara o trecho na jstl

 <c:forEach var="empresa" items="${empresas}">

repara o trecho na servlet

  req.setAttribute("empresa",empresa);

o nome da variável utilizada em items deve ser igual à chave do atributo que vc coloca no request

se vc faz :

  req.setAttribute("empresa",empresa);

você deveria ter:

<c:forEach var="empresa" items="${empresa}">
solução!

No seu caso, a tag foreach é quem vai fazer a iteração, então vc manda logo a lista toda no request, não tem esse for dentro da servlet, faz assim:

package br.com.alura.gerenciador.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Empresa;
import br.com.alura.gerenciador.dao.EmpresaDAO;

@WebServlet("/busca")
public class BuscaEmpresas extends HttpServlet {


    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("Inicializando a Servlet " + this);
    }

    @Override

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("   Instanciando uma Servlet do tipo BuscaEmpresa "+ this);


        resp.setContentType("text/html");// ContentType-> Tipo de conteudo-> o tipo de conteudo q vai ser retornado para a pessoa.Nesse caso um html

        PrintWriter ptw = resp.getWriter();
        String filtro = req.getParameter("filtro");
        Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);


        //ptw.print("<html>");
        //ptw.print("<head>");
        //ptw.print("<body>");
        //ptw.print("<h1> <b>Busca empresas</b> </h1>");



            req.setAttribute("empresas",empresas);
            RequestDispatcher dispacher = req.getRequestDispatcher("/WEB-INF/paginas/BuscarEmpresas.jsp");
            dispacher.forward(req, resp);



        //ptw.print("</body>");
        //ptw.print("</head>");
        //ptw.print("</html>");




    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("Destruindo a Servlet " + this);
    }

}

no jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Buscas de Empresas</title>
</head>
<body>

<h3>Busca de empresas</h3>
    <ul>
        <c:forEach var="empresa" items="${empresas}">
            <li>${empresa.id}: ${empresa.nome}</li>
        </c:forEach>
    </ul>

</body>
</html>

Deu certo meu amigo. Obrigado !!!