Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida no Ex. 2 da Aula 4 - Enviando dados para a JSP

Bom dia Mateus.

Os outros campos estão aparecendo normalmente ?

5 respostas

Mateus,

Veja também se o campo se chama realmente dataPagamento e se as datas das tarefas estão realmente preenchidas no banco.

Abraço!

Olá Guilherme Mateus, sim, estão ! Todos corretamente.

Olá Joviane Fernandes Jardim, não entendi o seu contexto referente as "tarefas preenchidas no banco".

Acontece que o problema é que no ContaDAO, o método adiciona() não insere uma dataPagamento no banco, por isso não exibe nada.

O projeto foi distribuído para os alunos com essa ausência de correção, e se fizer um refactor para corrigir isso, irá quebrar muitas outras partes do projeto, inclusive na JSP.

O método adiciona está assim:

public void adiciona(Conta conta) {
    String sql = "insert into contas (descricao, paga, valor, tipo) values (?,?,?,?,?)";
    PreparedStatement stmt;
    try {
        stmt = connection.prepareStatement(sql);
        stmt.setString(1, conta.getDescricao());
        stmt.setBoolean(2, conta.isPaga());
        stmt.setDouble(3, conta.getValor());
        stmt.setString(4, conta.getTipo().name());
        stmt.execute();
        connection.close();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

    }

É nítido vermos que falta passar o atributo dataPagamento para a variável String que armazena o Script SQL.

Obrigado pela ajuda galera!

Oi Mateus,

De fato falta a data na inserção. Basta alterar esse insert para:

public void adiciona(Conta conta) {
    String sql = "insert into contas (descricao, paga, valor, tipo, dataPagamento) values (?, ?, ?, ?, ?)";
    PreparedStatement stmt;
    try {
        stmt = connection.prepareStatement(sql);
        stmt.setString(1, conta.getDescricao());
        stmt.setBoolean(2, conta.isPaga());
        stmt.setDouble(3, conta.getValor());
        stmt.setString(4, conta.getTipo().name());
        stmt.setDate(5, new java.sql.Date(conta.getDataPagamento.getTimeInMillis()) )
        stmt.execute();
        connection.close();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

}

Creio que assim a data será inserida.

Veja se resolveu e nos retorne por favor. Abraço.

solução

Olá Paulo,

Então, percebi que aparentemente não necessita da data de pagamento na hora da inserção, a data é mostrada conforme você marca como paga ou não a conta , isso é feito nos tópicos posteriores do curso.

Obrigado pela atenção e ajuda!

No meu browser, ao acessar a URl declarada no meu controller que exibe as informações na view, não exibe a data de pagamento. Segue .jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
<table style="height: 10px; width: 775px;" border="1">
    <tr>
        <th>Código</th>
        <th>Descrição</th>
        <th>Valor</th>
        <th>Tipo</th>
        <th>Pagamento realizado?</th>
        <th>Data de pagamento</th>
    </tr>
    <c:forEach items="${listaContas}" var="dadosConta">
        <tr>
            <td>${dadosConta.id}</td>
            <td>${dadosConta.descricao}</td>
            <td>${dadosConta.valor}</td>
            <td>${dadosConta.tipo}</td>
            <td id="tarefa_${dadosConta.id}">
                <c:if test="${dadosConta.paga eq false}">
                    Não
                </c:if>
                <c:if test="${dadosConta.paga eq true}">
                    Sim
                </c:if>
            </td>
            <td>
                <fmt:formatDate value="${dadosConta.dataPagamento.time}" pattern="dd/MM/yyyy"/>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

valeu pela ajuda!