Boa noite, estou tentando criar uma aplicação que consulta uma tabela e exibi no navegador seus registros ao usuário, após isso ele pode selecionar uma das linhas e consultar todos os registros de outra tabela que tenham referência a linha selecionada.
Adicionei na Servlet para buscar no banco de dados e retornar a tal lista, utilizei o método request.setAttribute() para compartilhar a lista de registros com a página JSP. No entanto, a lista sempre está retornando nulo para dentro da JSP.
Tabela dentro da JSP
<table border="1">
<tr>
<th>Id</th>
<th>Data</th>
<th>Tipo</th>
<th>Valor</th>
<th>Passe</th>
<th>Remover</th>
</tr>
<% List<Registro> lreg = (List<Registro>) request.getAttribute("lreg"); %>
<% if (lreg != null) { %>
<% for(Registro r : lreg) { %>
<tr>
<td> <% out.print(r.getId()); %> </td>
<td> <% out.print(r.getData()); %> </td>
<td> <% out.print(r.getTipo().getDescricao()); %> </td>
<td> <% out.print(r.getValor()); %> </td>
<td> <% out.print(r.getPasseFk()); %> </td>
<td>
<a href="PasseController?op=Deletar Registro&txtid=<% out.print(r.getId()); %>">
<img src="imgs/trash.svg" alt="Trash Icon" witdh="20" height="20">
</a>
</td>
</tr>
<% } // for(Registro r : lreg) %>
<% } // if(!lreg.isEmpty()) %>
</table>
Servlet.
private void execConsultarRegistros(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, ClassNotFoundException {
int id = Integer.parseInt(request.getParameter("txtpasse"));
Registro reg = new Registro();
reg.setId(id);
RegistroDAO rdao = new RegistroDAO();
List<Registro> lreg = rdao.consultarPorFk(reg);
request.setAttribute("lreg", lreg);
}
Esse método é chamado dentro do método processingRequest que verifica qual opção o usuário selecionou.
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String op = request.getParameter("op");
try {
if (op.equals("Cadastrar")) {
this.execCadastrarPasse(request, response);
} else if (op.equals("Deletar")) {
this.execDeletarPasse(request, response);
} else if (op.equals("Adicionar Registro")) {
this.execAdicionarRegistro(request, response);
} else if (op.equals("Deletar Registro")) {
this.execDeletarRegistro(request, response);
} else if (op.equals("Consultar Registros")) {
this.execConsultarRegistros(request, response);
}
this.exibirPagina(request, response);
} catch (SQLException | ClassNotFoundException ex) {
request.setAttribute("msg", ex.getMessage());
request.getRequestDispatcher("erro.jsp").forward(request, response);
}
}
O método exibirPagina() apenas atualiza a primeira lista dentro da página.
private void exibirPagina(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, ClassNotFoundException {
PasseDAO pdao = new PasseDAO();
List<Passe> lpasse = pdao.consultarTodos();
request.setAttribute("lpasse", lpasse);
request.getRequestDispatcher("principal.jsp").forward(request, response);
}