1
resposta

Usando LocalDate

Boa tarde gente, seguir o passo a passo do instrutor mas não obtive sucesso, então resolvi criar uma solução e aproveitar para usar o LocalDate. eu percebi que la no static do Banco criado pelo professor não era add nenhuma data, e no vídeo não vi ele fazendo isso, e um dos erros que mostrava na minha linha de erro era que esse campo era nulo.

Bom, dito tudo isso eu resolvi me desafiar e fiz o seguinte código

Classe Banco, que vai fazer aqueles cadastros automáticos caso não seja inserido nada.

package br.com.alura.servlet;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

public class Banco {
    private static List<Empresa> lista = new ArrayList<Empresa>();

    static {
        LocalDate enviandoData = LocalDate.of(1992, 02, 5);

        Empresa empresa = new Empresa();
        empresa.setNome("Alura");
        empresa.setDataCriacao(enviandoData);

        Empresa empresa2 = new Empresa();
        empresa2.setNome("Caelum");
        empresa2.setDataCriacao(enviandoData);

        lista.add(empresa);
        lista.add(empresa2);
    }

    public void adicionar(Empresa empresa) {
        lista.add(empresa);
    }

    public static List<Empresa> getLista(){
        return Banco.lista;
    }
}

Classe novaEmpresaServlet, onde vamos receber o código do formulário e mandar para página de empresas criadas.

package br.com.alura.servlet;

import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class novaEmpresaServlet
 */
@WebServlet("/novaEmpresaServlet")
public class novaEmpresaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String nomeFormulario = request.getParameter("nome");
        String dataFormulario = request.getParameter("data");

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        LocalDate dataEmFormatoData = LocalDate.parse(dataFormulario,formatter);

        Empresa empresa = new Empresa();
        empresa.setNome(nomeFormulario);
        empresa.setDataCriacao(dataEmFormatoData);

        Banco banco = new Banco();
        banco.adicionar(empresa);

        request.setAttribute("empresa", empresa.getNome());

        RequestDispatcher rd = request.getRequestDispatcher("/novaEmpresaCriada.jsp");
        rd.forward(request, response);
    }

}

Classe Empresa, onde criamos o atributo com LocalDate e os métodos que vão receber essa data, tratar e devolver através de um get

package br.com.alura.servlet;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Empresa {
    private int id;
    private String nome;
    private LocalDate dataCriacao;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setDataCriacao(LocalDate dataCriacao) {
        this.dataCriacao = dataCriacao;
    }

    private LocalDate getDataCriacaoFormatoPadrao() {
        return dataCriacao;
    }

    public String getDataCriacao() {
        LocalDate dataEmTexto = getDataCriacaoFormatoPadrao();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        String dataConversao = dataEmTexto.format(formatter);

        return dataConversao;
    }
}

Bom gente o intuito da criação foi acompanhar o curso mesmo, pois não conseguir seguir em frente com o erro no meu código, como o código acima vai gerar o mesmo resultado resolvi fazer, infelizmente não é necessário usar o fmt na página jsp pois o código já vai em formato de texto

1 resposta

Oi Jorge,

Fez muito bem e resolveu o assunto :)

O problema é que o fmt só trabalho com java.util.Date e não com java.time.LocalDate. Ou seja, vc poderia implementar que converte entre as duas APIs para auxiliar, por exemplo:

public java.util.DateDate getDataCriacaoAsDate() {
    LocalDate dataEmTexto = getDataCriacaoFormatoPadrao();
    return java.util.Date.from(dataEmTexto.atStartOfDay(ZoneId.systemDefault()).toInstant());;
}

Espero ter ajudado!

abs, Nico