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)

Como usar o atributo "date" em HTML ?

Olá galera,

Eu tentei usar o atributo "date" no lugar do "type" e achei bem mais intuitivo, mas ao tentar rodar ocorre a exception relacionado ao parse, assim creio que o valor retornado do formulário não atende os parâmetros definidos. Como proceder nesse caso?

Formulário JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="format"%>
<core:url value="/NovaEmpresa" var="linkServletNovaEmpresa" />
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Cadastro de empresas</title>
</head>
<body>
    <form action="${linkServletNovaEmpresa}" method="post">
        Nome da Empresa: <input type="text" name="nome"/> 
        Data de abertura: <input type="date" name="data"/>
        <input type="submit" />
    </form>

</body>
</html>

Servlet:

package br.com.alura.gerenciador.novaempresa;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.security.auth.message.callback.PrivateKeyCallback.Request;
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;

import br.com.alura.gerenciador.servlet.Empresa;
import br.com.alura.gerenciador.servlet.Banco;

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

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Cadastrando uma nova empresa");

        String nomeEmpresa = req.getParameter("nome");
        String paramDateEmpresa = req.getParameter("data");

        // SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");

        Date dataAbertura = null;

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            dataAbertura = sdf.parse(paramDateEmpresa);
        } catch (ParseException e) {
            throw new ServletException(e + "Parse de data Falho!");
        }

        Empresa empresa = new Empresa();
        empresa.setNome(nomeEmpresa);
        empresa.setDataAbertura(dataAbertura);

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

//        PrintWriter out = resp.getWriter();
//        out.println("<html><body>Empresa " + nomeEmpresa + " cadastrada com sucesso!</body></html>");

        // Chamando o JSP
        RequestDispatcher rd = req.getRequestDispatcher("/NovaEmpresaCriada.jsp");
        req.setAttribute("empresa", empresa.getNome());
        rd.forward(req, resp);
    }

}
2 respostas
solução

Olá Rogerio!

Provavelmente o seu campo date está retornando a data no padrão americano ano/mês/dia.

Tenta alterar o seu SimpleDateFormat disso:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");

Para isso:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

Veja se funciona pra ti, aguardo seu retorno!

Olá Rogerio!

Funcionou pra ti?