3
respostas

Não grava hora lançada

O sistema não está gravando a hora cadastrada...

No console gera a msg:

Qual é a importância de escrevermos testes de unidade para uma aplicação java?
 RESPONDER
Opinião do Instrutor

Testes de unidade nos dão uma garantia maior sobre o funcionamento do código da aplicação, além disso, os testes nos ajudam a implementar novas funcionalidades ou a modificar a implementação de funcionalidades já existentes, pois eles garantem que, pelo menos nos casos que foram testados, o código continua funcionando da mesma forma.

Pelo que eu vi anteriormente, esse "erro" acontece por causa de parâmetros vindos do form.jsp

Meu form.jsp:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="alura" %>

<c:import url="/WEB-INF/jsp/header.jsp" />

<form action="${linkTo[HoraLancadaController].adiciona(null)}" method="post">

    <label for="data">Data:</label>
    <input type="text" name="horaLancada.data" id="data" class="form-control" />
    <alura:validationMessage name="horaLancada.data"/>

    <label for="horaInicial">Hora Inicial:</label>
    <input type="text" name="horaLancada.horaInicial" id="horaInical" class="form-control" />
    <alura:validationMessage name="horaLancada.horaInicial"/>

    <label for="horaFinal">Hora Final:</label>
    <input type="text" name="horaLancada.horaFinal" id="horaFinal" class="form-control" />
    <alura:validationMessage name="horaLancada.horaFinal"/>

    <input type="submit" value="Cadastrar" class="btn"/>

</form>

<c:import url="/WEB-INF/jsp/footer.jsp" />
3 respostas

Bom dia Ewerton, pode passar o Controller que recebe os dados desse formulário por favor?

Boa tarde Guilherme!!

Segue abaixo:

package br.com.alura.horas.controller;

import java.util.List;

import javax.inject.Inject;
import javax.validation.Valid;

import br.com.alura.horas.dao.HoraLancadaDao;
import br.com.alura.horas.modelo.HoraLancada;
import br.com.alura.horas.modelo.RelatorioDeHoras;
import br.com.alura.horas.seguranca.UsuarioLogado;
import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.validator.Validator;

@Controller
public class HoraLancadaController {

    private Result result;
    private Validator validator;
    private UsuarioLogado usuarioLogado;
    private HoraLancadaDao horaLancadaDao;

    @Inject
    public HoraLancadaController(HoraLancadaDao horaLancadaDao, Validator validator, Result result,
            UsuarioLogado usuarioLogado) {
        this.horaLancadaDao = horaLancadaDao;
        this.validator = validator;
        this.result = result;
        this.usuarioLogado = usuarioLogado;
    }

    public HoraLancadaController() {
    }

    public void form() {
    }

    public void adiciona(@Valid HoraLancada horaLancada) {
        validator.onErrorRedirectTo(this).form();
        horaLancada.setUsuario(usuarioLogado.getUsuario());
        horaLancadaDao.adiciona(horaLancada);
        result.redirectTo(this).lista();
    }

    public void lista() {
        result.include("horas", horaLancadaDao.lista());
    }

    public void relatorioDeHoras() {
        List<HoraLancada> horas = horaLancadaDao.horaDoUsuario(usuarioLogado.getUsuario());
        RelatorioDeHoras relatorioDeHoras = new RelatorioDeHoras(horas);
        result.include("relatorio", relatorioDeHoras);
    }
}

Obrigado!

Obrigado Ewerton,

Quando passamos algum objeto via parametro para o contrutor, já estamos fazendo uma forma de injeção. Então não precisa do @injection, ou se quiser pode tirar-los do construtor e anotar a variável

Faz assim, coloca um ponto de sys.out no controller e outro no dao pra ver se a informação está chegando correta por favor