Olá, eu estou desenvolvendo um código de cadastro de contas bancárias e travei na parte de mudar a linguagem JSP para a JSTL, na parte do forEach. Eu preciso listar os atributos inseridos da classe mãe da herança e, depois, dizer qual foi o respectivo tipo de conta, utilizando o ifElse (ou choose, no caso).
Classe Controller
public class ContaBancariaController extends HttpServlet {
private static final long serialVersionUID = 1L;
public ContaBancariaController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.getParameter("operacao") != null) {
request.getRequestDispatcher("contaBancariaCadastro.jsp").forward(request, response);
} else {
request.setAttribute("contasBancarias", ContaBancariaDao.obterLista());
request.getRequestDispatcher("contaBancariaLista.jsp").forward(request, response);
}
//MÉTODO EXCLUIR ESTÁ DANDO EXCEÇÃO
// int id = Integer.valueOf(request.getParameter(“id”));
//
// ContaBancariaDao.excluir(id);
//
// this.chamarListaContaBancaria(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String tipo = request.getParameter("tipo");
int agencia = Integer.valueOf(request.getParameter("agencia"));
int numConta = Integer.valueOf(request.getParameter("numConta"));
float saldo = Float.valueOf(request.getParameter("saldo"));
if ("CC".equals(tipo)) {
ContaCorrente cc = new ContaCorrente(agencia, numConta, saldo);
request.getSession().setAttribute("novaCC", cc);
request.getRequestDispatcher("contaCorrenteCadastro.jsp").forward(request, response);
} else if ("CP".equals(tipo)) {
ContaPoupanca cp = new ContaPoupanca(agencia, numConta, saldo);
request.getSession().setAttribute("novaCP", cp);
request.getRequestDispatcher("contaPoupancaCadastro.jsp").forward(request, response);
} else if ("INV".equals(tipo)) {
Investimento inv = new Investimento(agencia, numConta, saldo);
request.getSession().setAttribute("novoInv", inv);
request.getRequestDispatcher("investimentoCadastro.jsp").forward(request, response);
}
}
// private void chamarListaContaBancaria(HttpServletRequest request, HttpServletResponse response)
// throws ServletException, IOException {
// request.setAttribute(“contasBancarias”, ContaBancariaDao.obterLista());
//
// request.getRequestDispatcher(“contaBancariaLista.jsp”).forward(request, response);
// }
}
Classe DAO
public class ContaBancariaDao {
public static ContaBancaria incluir(ContaBancaria cb) {
try {
PreparedStatement ps =
Conexao.obterConexao().prepareStatement(
"INSERT into TContaBancaria (agencia, numConta, saldo) values (?,?,?)",
Statement.RETURN_GENERATED_KEYS
);
ps.setInt(1, cb.getAgencia());
ps.setInt(2, cb.getNumConta());
ps.setFloat(3, cb.getSaldo());
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
if(rs.next()) {
cb.setId(rs.getInt(1));
}
return cb;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static List<ContaBancaria> obterLista(){
List<ContaBancaria> lista = new ArrayList<ContaBancaria>();
lista.addAll(ContaCorrenteDao.obterLista());
lista.addAll(ContaPoupancaDao.obterLista());
lista.addAll(InvestimentoDao.obterLista());
return lista;
}
public static boolean excluir(int id){
try {
PreparedStatement ps =
Conexao.obterConexao().prepareStatement(
"DELETE FROM TContaBancaria WHERE id = ?"
);
ps.setInt(1, id);
ps.execute();
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
JSP PAGE da lista da classe Mãe
<%@page import=“dao.ContaBancariaDao”%>
<%@page import=“negocio.ContaCorrente”%>
<%@page import=“modelo.ContaBancaria”%>
<%@page import=“java.util.List”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
Cadastramento de Contas
<form action="ContaBancariaController" method="get">
<input type="hidden" name="operacao" value="new">
<button type="submit" class="btn btn-default">Novo</button>
</form>
<hr>
<%
if (lista != null) {
%>
<table class="table table-striped">
<thead>
<tr>
<th>Id</th>
<th>Agência</th>
<th>Número da Conta</th>
<th>Saldo</th>
<th>Tipo de conta</th>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${lista}">
<tr>
<td>${item.id}</td>
<td>${item.agencia}</td>
<td>${item.numConta}</td>
<td>${item.saldo}</td>
</c:forEach>
<c:choose>
<c:when test="item instanceof ContaCorrente">
item = "Conta-Corrente"
</c:when>
<c:when test="item instanceof ContaPoupanca">
item = "Conta-Poupança"
</c:when>
<c:when test="item instanceof Investimento">
item = "Investimento"
</c:when>
</c:choose>
<form action="ContaBancariaController" method="get">
<input type="hidden" name="idContaBancaria" value="${item.id}">
<td><button type="submit" class="btn btn-default">Excluir</button></td>
</form>
<%-- <% --%>
<%-- for (ContaBancaria item : lista) { --%>
<%-- %> --%>
<!-- <tr> -->
<%-- <td><%=item.getId()%></td> --%>
<%-- <td><%=item.getAgencia()%></td> --%>
<%-- <td><%=item.getNumConta()%></td> --%>
<%-- <td><%=item.getSaldo()%></td> --%>
<%-- <td><%=item instanceof ContaCorrente ? "Conta-Corrente" : "Conta-Poupança"%></td> --%>
</tr>
<%-- <% --%>
<!-- // } -->
<%-- %> --%>
</tbody>
</table>
<%
} else {
%>
<p>Nenhuma conta cadastrada!</p>
<%
}
%>
</div> </body> </html>
O código salva as informações no mySQL, mas não apresenta a lista que está no BD na View da aplicação. Quando o código estava somente com a linguagem JSP, ele listava tudo, sem nenhum erro; mas, agora, apesar de não apresentar alguma exceção, o código não lista na View as contas que eu cadastro, e eu preciso utilizar a linguagem JSTL na minha aplicação.
Eu desconfio que seja na parte do ifElse (choose), pois, quando o professor deu um exemplo em sala de aula, ele usou a condição ternária, porém eu possuo três subclasses na herança.
Se alguém puder me ajudar, eu agradeço!