Boa noite! Acompanhando o curso de Servlet Criei um controller que recebe todas as requisições, porém me surgiu uma dúvida agora, tenho uma lista de empresas no JSP e ao lado de cada empresa um link para editar a empresa, até ai tudo bem! Porém ao clicar no link são enviados para o controller dois parâmetros, a ação que vai instanciar a classe e o ID para buscar essa empresa, mas analisando o código do controller não entendo como ele consegue repassar o ID já que ele só dura durante uma requisição. E também o controller não recebe e nem repassa esse ID em nenhum momento. Alguém pode me elucidar?
@WebServlet("/entrada")
public class UnicaEntradaServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String paramAcao = request.getParameter("acao");
HttpSession sessao = request.getSession();
boolean usuarioNaoLogado = (sessao.getAttribute("usuarioLogado") == null);
boolean ehUmaAcaoProtegida = !(paramAcao.equals("Login")|| paramAcao.equals("LoginForm"));
if (ehUmaAcaoProtegida && usuarioNaoLogado) {
response.sendRedirect("entrada?acao=LoginForm");
return;
}
String nome;
String nomeDaClasse = "br.com.alura.gerenciador.acao." + paramAcao;
try {
Class classe = Class.forName(nomeDaClasse);
Acao acao = (Acao) classe.newInstance();
nome = acao.executa(request, response);
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
throw new ServletException(e);
}
String[] tipoEndereco = nome.split(":");
if (tipoEndereco[0].equals("forward")) {
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/" + tipoEndereco[1]);
rd.forward(request, response);
} else {
response.sendRedirect(tipoEndereco[1]);
}
}
}
<%@page import="br.com.alura.gerenciador.modelo.Empresa"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Usuário Logado: ${usuarioLogado.login }
<br>
<br>
<br>
<c:if test="${not empty empresaNome }">
Empresa ${empresaNome } cadastrada com sucesso!
</c:if>
<br> Lista de Empresas:
<br />
<ul>
<c:forEach items="${listaEmpresa }" var="empresa">
<li>${empresa.nome }-<fmt:formatDate
value="${empresa.dataAbertura }" pattern="dd/MM/yyyy" /> <a
href="<c:url value="/entrada?acao=MostraEmpresas&id=${empresa.id }" />">Editar</a>
<a
href='<c:url value="/entrada?acao=RemoveEmpresa&id=${empresa.id }" />'>Remover</a>
</li>
</c:forEach>
</ul>
</body>
</html>
package br.com.alura.gerenciador.acao;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.alura.gerenciador.modelo.Banco;
import br.com.alura.gerenciador.modelo.Empresa;
public class MostraEmpresas implements Acao {
public String executa(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String paramId = request.getParameter("id");
Integer id = Integer.valueOf(paramId);
Banco banco = new Banco();
Empresa empresa = banco.buscaEmpresaid(id);
System.out.println(empresa.getNome());
request.setAttribute("empresa", empresa);
return "forward:formAlteraEmpresa.jsp";
}
}