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

[Dúvida] Erro 500

Ao tentar clicar no botão submit do formulário que altera a empresa essa mensagem: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Minha classe AlteraEmpresa abaixo (idêntica do professor)

package br.com.alura.gerenciador.acao;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import br.com.alura.gerenciador.modelo.Banco;
import br.com.alura.gerenciador.modelo.Empresa;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class AlteraEmpresa {

    public String executa(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String nomeEmpresa = request.getParameter("nome");
        String paramDataEmpresa = request.getParameter("data");
        String paramId = request.getParameter("id");
        Integer id = Integer.valueOf(paramId);

        System.out.println("acao altera empresa" + id);

        Date dataAbertura = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            dataAbertura = sdf.parse(paramDataEmpresa);
        } catch (ParseException e) {
            throw new ServletException(e);
        }

        System.out.println(id);

        Banco banco = new Banco();
        Empresa empresa = banco.buscaEmpresaPelaId(id);
        empresa.setNome(nomeEmpresa);
        empresa.setDataAbertura(dataAbertura);

        return "redirect:entrada?acao=ListaEmpresas";
    }
}

A linha 21 que está dando erro seria: Integer id = Integer.valueOf(paramId);


o meu servlet está desta forma:

package br.com.alura.gerenciador;

import java.io.IOException;

import br.com.alura.gerenciador.acao.AlteraEmpresa;
import br.com.alura.gerenciador.acao.ListaEmpresas;
import br.com.alura.gerenciador.acao.MostraEmpresa;
import br.com.alura.gerenciador.acao.NovaEmpresa;
import br.com.alura.gerenciador.acao.RemoveEmpresa;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class UnacaEntradaServlet
 */

// --> /entrada

public class UnacaEntradaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String nome = null;

        String paraAcao = request.getParameter("acao");

        if (paraAcao.equals("ListaEmpresas")) {
            ListaEmpresas acao = new ListaEmpresas();
            nome = acao.executa(request, response);

        } else if (paraAcao.equals("RemoveEmpresa")) {
            RemoveEmpresa acao = new RemoveEmpresa();
            nome = acao.executa(request, response);

        } else if (paraAcao.equals("MostraEmpresa")) {
            MostraEmpresa acao = new MostraEmpresa();
            nome = acao.executa(request, response);
        }

        else if (paraAcao.equals("AlteraEmpresa")) {
            AlteraEmpresa acao = new AlteraEmpresa();
            nome = acao.executa(request, response);
        }

        else if (paraAcao.equals("NovaEmpresa")) {
            NovaEmpresa acao = new NovaEmpresa();
            nome = acao.executa(request, response);
        }

        String[] tipoEEndereco = nome.split(":");

        if (tipoEEndereco[0].equals("foward")) {
            RequestDispatcher rd = request.getRequestDispatcher(tipoEEndereco[1]);
            rd.forward(request, response);
        } else {
            response.sendRedirect(tipoEEndereco[1]);
        }

    }

}

Percebi que quando o professor está no ListaEmpresas e clica no link Altera o formulário que se abre, o formAlteraEmpresa já carrega com o nome e a data da empresa inserida no campo de texto porém a minha não. Meu jsp está igual o dele:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguém pode me ajudar para eu continuar o curso?

7 respostas

Boa noite, Arthur

Poderia colocar aqui o .jsp do ListaEmpresas e a classe JAVA?

Classe:

package br.com.alura.gerenciador.acao;

import java.io.IOException;
import java.util.List;

import br.com.alura.gerenciador.modelo.Banco;
import br.com.alura.gerenciador.modelo.Empresa;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class ListaEmpresas {

    public String executa(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        System.out.println("acao Listando empresas");

        Banco banco = new Banco();
        List<Empresa> lista = banco.getEmpresas();

        request.setAttribute("empresas", lista);

        return "foward:listaEmpresas.jsp";
    }

}

JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page
    import="java.util.List, br.com.alura.gerenciador.modelo.Empresa"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Java Standard Taglib</title>
</head>
<body>

    Lista de empresas:

    <ul>
        <c:forEach items="${empresas}" var="empresa">
            <li>
            ${empresa.nome }- 
            <fmt:formatDate value="${empresa.dataAbertura}" pattern="dd/MM/yyyy" /> 
                <a href="/gerenciador/entrada?acao=MostraEmpresa&id=${empresa.id }">edita</a>
                <a href="/gerenciador/entrada?acao=RemoveEmpresa&id=${empresa.id }">remove</a>
            </li>
        </c:forEach>
    </ul>


</body>
</html>

Não sei por qual motivo mas parece que não tá puxando os atributos da empresa pro formulário.

Debuga e printa aqui o contéudo da List lista, logo após o comando

List<Empresa> lista = banco.getEmpresas();

(Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Seria isso que vc pediu? Não estou familiarizado com o debugger aí fiz um laço pra listar as empresas dps de acessar o jsp

Você escreveu foward, em vez de forward

return "foward:listaEmpresas.jsp";
solução!

Depois que corrigi começou a dar um tanto de erro bizarro, preferi baixar os arquivos da aula novamente e refazer os passos