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

Dúvida no Ex. 3 da Aula 12 - Um padrão de controle

A classe BuscaEmpresas faz o processo de busca e o resultado disso deveria ser mostrado na página buscaEmpresa.jsp. Porém, somente os 6 marcadores do

  • , relativos aos 6 cadastros que possuo, são exibidos na página e nenhum dado é mostrado. Se eu cadastrar mais um usuário, ficam 7 marcadores na página mas, novamente, sem nenhuma empresa sendo exibida. Seguem meus códigos:
    public class BuscaEmpresas implements Tarefa2 {
    
        @Override    
        public String executa(HttpServletRequest req, HttpServletResponse resp) {
    
    
            String filtro = req.getParameter("filtro");
    
            Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);
            req.setAttribute("empresas", empresas);
            return "/WEB-INF/Paginas/buscaEmpresa.jsp";
    
    
        }
    }
    
    --------------------------------------------------------
    Página buscaEmpresa.jsp:
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html><head><title>Busca </title></head>
    
    <body>
    
    RESULTADO DA BUSCA: <br>
    <ul>
    <c:forEach var="empresas" items="${empresas } ">
    <li>${Empresa.id }: ${Empresas.nome }</li>
    
    
     </c:forEach>
    </ul>
    
    
    </body></html>
  • 11 respostas

    Olá Bruno! Mude essa linha de seu buscaEmpresa.jsp;

    <li>${Empresa.id }: ${Empresas.nome }</li>

    Para:

    <li>${empresa.id }: ${empresa.nome}</li>

    Espero ter ajudado! Bons Estudos!

    Olá, Romário! Obrigado pela ajuda!

    Mas o problema persiste. E eu não compreendi o porquê desse "empresa". Quem é esse cara?

    Bruno,

    mude a seguinte linha :

    no seu for each a variavel tem que ser empresa , e o item por ser uma lista tem que ser empresas , repare que você colocou tudo como empresas

    <ul>
    <c:forEach var="empresas" items="${empresas } ">
    <li>${Empresa.id }: ${Empresas.nome }</li>

    altere a a variável para empresa deste jeito .

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

    espero ter ajudado ,

    Bruno, faça como o Celso disse. Esqueci de dizer que tinha que alterar a variável. kkkkkkkk

    Ainda nada! Modifiquei, salvei tudo, até reiniciei o servidor e continua a mesma coisa.

    Entendi que a variável "empresa" que vcs disseram para colocar, vem da buscaPorSimilaridade num for que está na classe EmpresaDAO. Certo?

    Mas mesmo assim, continua só aparecendo os marcadores. :/

    Bruno ,

    encontrei o erro na pagina buscaEmpresa.jsp , faltou fechar o comando de pular linha

    segue como que está :

    RESULTADO DA BUSCA: <br>

    coloque um / depois do br

    RESULTADO DA BUSCA: <br/>

    modifique isso que irá dar certo .

    só para explicar melhor , a a variável empresa não é a da classe empresaDAO

    essa variável foi declarada no seu forEach mesmo . para poder percorrer a lista de empresas

    Espero ter Ajudado

    Obrigado pela explicação!

    Alterado, salvo, servidor até reiniciado (se bem que nem precisaria), verifiquei se estou de fato trabalhando com as páginas em questão, nomes, td certo, contudo... O problema persiste :/

    Bruno,

    por gentileza , poste suas classes após as mudanças , para verificar o que pode estar ocorrendo .

    O que está em jogo são 3 classes e uma página: a Controller2 que é o controlador, BuscaEmpresas que faz a negociação, a interface Tarefa2 e a págida buscaEmpresa.jsp que é o view. Seguem as classes:

    @WebServlet(urlPatterns = "/executa2")
    public class Controller2 extends HttpServlet {
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            String tarefa = req.getParameter("tarefa");
    
            if (tarefa == null) {
                throw new IllegalArgumentException("Você esqueceu de passar a tarefa!");
    
            }
    
            tarefa = "br.com.alura.gerenciador.web." + tarefa;
    
            try {
    
                Class<?> type = Class.forName(tarefa);
                Tarefa2 instancia = (Tarefa2) type.newInstance();
                String pagina = instancia.executa(req, resp);
    
                RequestDispatcher dispatcher = req.getRequestDispatcher(pagina);
                dispatcher.forward(req, resp);
    
            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
                throw new ServletException(e);
    
            }
    
        }
    
    }
    
    -------------------------------------------------------------------
    public class BuscaEmpresas implements Tarefa2 {
    
        @Override    
        public String executa(HttpServletRequest req, HttpServletResponse resp) {
    
    
            String filtro = req.getParameter("filtro");
    
            Collection<Empresa> empresas = new EmpresaDAO().buscaPorSimilaridade(filtro);
            req.setAttribute("empresas", empresas);
            return "/WEB-INF/Paginas/buscaEmpresa.jsp";
    
    
        }
    }
    ------------------------------------------------------------------
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    <html><head><title>Busca </title></head>
    
    <body>
    
    RESULTADO DA BUSCA: <br/>
    <ul>
    <c:forEach var="empresa" items="${empresas } ">
    <li>${Empresa.id }: ${Empresa.nome }</li>
    
    
     </c:forEach>
    </ul>
    
    
    
    </body></html>
    ---------------------------------------------------------------------
    public interface Tarefa2 {
    
        String  executa(HttpServletRequest req, HttpServletResponse resp);
    
    }
    solução!

    Bruno,

    sua pagina buscaEmpresa.jsp continua errada , mude as seguintes :

    <li>${Empresa.id }: ${Empresa.nome }</li>

    repare que empresa está com letra maiúscula , altere para :

    <li>${empresa.id }: ${empresa.nome }</li>

    faça essa alteração que irá dar certo .

    A solução para quem precisar.

    No codigo acima a servlet adiciona o valor a variavel empresas: req.setAttribute("empresas", empresas); E no jsp as duas maneiras estavam erradas: empresa. e Empresa. A maneira correta seria: ${empresas.id }: ${empresas.nome }