Olá desenvolvedores, avançando um pouco mais em nossos tutoriais damos início a mais uma nova série onde trabalharemos com datas. Dessa forma na página index.jsp onde estamos criando links para as rotinas que temos implementados iremos inserir mais um.
O passo seguinte é criar dentro da subpasta pages a página datas.jsp, e para facilitar o nosso trabalho iremos recorrer ao plugin Datepicker do jQuery. Acesse o site oficial selecione e copie para dentro do cabeçalho (head) da sua página datas.jsp as linhas de código como mostra a imagem.
Agora dentro da tag body iremos criar um formulário. No cabeçalho do formulário na action que é o local que determina para onde os dados serão enviados informaremos a servlet “calcularDataFinal” que o interceptará. E como desejamos enviar o formulário via POST, o método deverá ser informado.
O escopo do formulário trará a data inicial, a data em tempo (horas) e um botão que chamará o evento de cálculo da data. Por meio do datapicker poderemos formatar a data de forma que se torne mais amigável para nós.
E fora do formulário implementaremos um campo que mostrará o resultado da data calculada, resultado este que virá da servlet.
E finalmente implementaremos em Javascript uma função que invocando o jQuery transformará a data inicial em um datepicker.
Quando o usuário inserir a data inicial, o tempo em horas e clicar em enviar, estes dados serão redirecionados para a servlet que irá interceptar, calcular e retornar para a página JSP o resultado.
CLASSE DE CONEXÃO
Utilizaremos então a classe de conexão DAO para que possamos de uma forma simplificada gravar no banco de dados, isto é, realizar o insert.
Antes, porém, é preciso criar a sequência que permitirá a criação automática da chave primária para cada registro. Na base de dados curso-jsp clique com o botão direito em sequences >> New Sequence… e em Name insira final-projetos_id_seq. Na aba Definition em Start e Minimum coloque 1 e clique em OK.
Agora sim, na base de dados curso-jsp crie a tabela finalprojetos. Esta tabela conterá uma chave primária onde o ID que a identifica será do tipo Integer. Além disso o atributo nextval permite que a primary key de cada registro seja incrementada uma a uma. A tabela conterá ainda um campo para a data final.
Tabela criada, vamos agora implementar o DAO – Data Access Object, que é a classe responsável não apenas pela gravação, mas também por qualquer operação do banco de dados.
Assim, para criar o DAO clique com o botão direito do mouse sobre o package DAO >> New >> class. Se não tem este pacote, aconselho que o crie para manter seu projeto bem estruturado e organizado. O nome da classe DAO será DaoCalculaDataFinal.
E como possuímos de implementações anteriores o método de conexão, na classe DaoCalculaDataFinal precisaremos apenas chamá-lo.
private Connection connection;
E do mesmo modo, dentro do método construtor instanciaremos a conexão, que retornará a conexão do banco de dados.
E o DAO implementará além do construtor mais um único método que será o responsável por retornar o resultado do cálculo da data. Este método implementa a Query de Insert que como argumento recebe a datafinal. Os valores serão passados via PreparedStatement, recurso usado para executar instruções de banco de dados.
IMPLEMENTANDO A SERVLET
Clique com o botão direito do mouse no pacote de servlet >> New >> Servlet. Em Class Name defina o nome da servlet como CalcularDataFinal. Na anotação corrija o redirecionamento.
@WebServlet(“/pages/calcularDataFinal”);
Instancie o DAO – Data Access Object.
DaoCalculaDataFinal calculaDataFinal = new DaoCalculaDataFinal();
E lembrando que, como o método de envio do formulário é o POST, toda a regra de negócio da funcionalidade que estamos implementando será então escrita dentro do doPost().
Dessa forma entenda que para a regra de negócio um dia será igual a oito horas, que é a jornada de trabalho diária da maioria das pessoas. Então dentro de um bloco try/catch escreveremos o nosso código. Começando com a implementação dentro do bloco try, definiremos uma variável para receber a hora/dia. Precisaremos também do Date que será a dataCalculada e que será inicializada como nula.
int horaDia = 8;
Date dataCalculada = null;
E também precisaremos receber o parâmetro de data que virá do formulário, bem como o tempo
String data = request.getParamenter(“data”);
int tempo = Integer.parseInt(request.getParameter("tempo"));
CALCULANDO A DATA
Na condição, se o tempo for menor ou igual a horaDia, então ele equivalerá há um dia. Desse modo, a dataCalculada recebe a data que foi passada por parâmetro, visto que será o mesmo dia, no entanto, esta data precisa ser convertida e formatada por meio do SimpleDateFormat.
E a partir da instância do objeto Calendar setaremos a data que foi informada, isto é, que veio por parâmetro. E então adicionaremos a data ao totalDeDias somando mais dois, o que possibilitará em caso de resultado do cálculo igual a oito somar mais um dia. Teremos também a dataCalculada sendo recebida.
Mas se não, se o tempo for maior que horaDia, alguns cálculos em cima do tempo serão necessários. Iniciaremos uma variável do tipo double para receber o total de dias caso este seja superior há um dia. Neste caso, o tempo será dividido por horaDia.
Ainda dentro do contexto do else precisaremos de uma nova verificação. Se totalDeDias for menor ou igual a um, não é um dia completo, entretanto, dentro do nosso contexto se tornará um dia.
Porém, se totalDeDias for maior que um, então novamente efetuaremos um cálculo. E mais, a partir da instância do objeto Calendar setaremos a data que foi informada, isto é, que veio por parâmetro. E então adicionaremos a data ao totalDeDias. Teremos também a dataCalculada sendo recebida.
E fora do escopo de todas as condições, ou seja, após o fluxo de execução, gravaremos o resultado processado no banco de dados. Porém, é preciso por meio do RequestDispatcher redirecionar para a página JSP, setar a dataCalculada e fazer de fato o redirecionamento.
EM POUCAS PALAVRAS
E assim finalizamos o exemplo de datas. Existem muitas outras possiblidades ao se trabalhar com datas, e para conhece-las é preciso estudar a documentação. Bom, eu fico por aqui e nos vemos no próximo tutorial.