Erro ao inserir uma data com datepicker e struts2

13 respostas
E

Boa tarde!

Bem estou desenvolvendo um formulario web, e estou utili\ando um datepicker Jquery para inserir data. Esta funcionando, porem nao estou conseguindo salvar este campo no banco de dados. Estou utilizando JDBC, um banco Mysql, e struts2, e bem estou recebendo o seguinte erro 500:

java.lang.NullPointerException
	arima.web.jdbc.dao.eventoDAO.adiciona(eventoDAO.java:32)
	arima.web.action.AdicionaEventosAction.execute(AdicionaEventosAction.java:18)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)

O codigo diz que o erro esta bem ao inserir este campo data com jquery. Segue o codigo o campo no JSP:

Data:<cal:campoData id="data"></cal:campoData>

A tag:

<%@ attribute name="id" required="true"%>

<input type="text" id="${id}" name="${id}" />
<script type="text/javascript">
	$("#${id}").datepicker({dateFormat: 'dd/mm/yy'});
</script>

Acredito que o erro esteja aí na taglib ou jsp, pois realizei um teste simples de inserção de dados e funcionou perfeitamente
Segue o teste:

package arima.web.testes;

import java.util.Calendar;

import arima.web.jdbc.classes.Evento;
import arima.web.jdbc.dao.eventoDAO;

public class TesteEventos {

	
	public static void main(String[] args) {
		
		Evento evento = new Evento();
		
		evento.setVaga("TESTE");
		evento.setData(Calendar.getInstance());
		
		
		eventoDAO dao = new eventoDAO();
		dao.adiciona(evento);
		
		System.out.println("Gravado");
	}

Estou seguindo a apostila fj21 da caelum como guia, existe até um desafio que acredito que resolve meu problema, é o 11.15 (Desafio-Calendário), da pagina 128.

13 Respostas

Hebert_Coelho

O q tem nessa linha? arima.web.jdbc.dao.eventoDAO.adiciona(eventoDAO.java:32)

drsmachado

jakefrog:
O q tem nessa linha? arima.web.jdbc.dao.eventoDAO.adiciona(eventoDAO.java:32)
²

E

tem isso:

stmt.setDate(4, new Date(evento.getData().getTimeInMillis()));

completo:

package arima.web.jdbc.dao;


import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import arima.web.jdbc.classes.Evento;
import arima.web.jdbc.connect.ConnectionFactory;


public class eventoDAO {

	private Connection connection;
	
	public eventoDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}
	
	
	public void adiciona(Evento evento) {
		
		String sql = "insert into eventos (vaga,empresa,local,data,horario,max,nomecandidato,regiao,referencia,telefone,cpf,obs,comparecimento,responsavel) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			
			stmt.setString(1, evento.getVaga());
			stmt.setString(2, evento.getEmpresa());
			stmt.setString(3, evento.getLocal());
			stmt.setDate(4, new Date(evento.getData().getTimeInMillis()));
			stmt.setDate(5, evento.getHorario());
			stmt.setInt(6, evento.getMax());
			stmt.setString(7, evento.getNomecandidato());
			stmt.setString(8, evento.getRegiao());
			stmt.setString(9, evento.getReferencia());
			stmt.setInt(10, evento.getTelefone());
			stmt.setInt(11, evento.getCpf());
			stmt.setString(12, evento.getObs());
			stmt.setBoolean(13, evento.getComparecimento());
			stmt.setString(14, evento.getResponsavel());
			
			stmt.execute();
			stmt.close();
			
		} catch (SQLException e) {
			throw new RuntimeException(e); 
		}
		
	}
	
}
drsmachado

O atributo data, de evento está nulo.

Ao tentar chamar o método getTimeInMilis, o erro ocorre.

E

hmm e como posso resolver isso? sou iniciante

drsmachado

Primeiramente, pesquisando e não pedindo nada pronto.
Segundo, se o objeto data está nulo, logo, sugiro que verifique se a data inserida pelo timestamp chega até a action.

E

Me desculpe se pareci preguiçoso, mas ja tentei de tudo, ja pesquisei e vim aqui pois nao tenho a minima ideia de como prosseguir.

Mas acredito que a action esta funcionando normal, fiz um outro codigo, olha isto:

Data: <input type="text" name="evento.data">

Coloquei um input normal, com name e a conexao com o banco de dados funcionou normalmente. Entao acredito que o erro esteja na tagcustomizada, que ja disse nao sei como resolver. Se alguem poder me ajudar agradeço

drsmachado

Qual o formato da data no teste?
Note que na tag customizada, você estipula a data como

<script type="text/javascript">   
    $("#${id}").datepicker({dateFormat: 'dd/mm/yy'});   
</script>

Isso pode fazer diferença

E

uma data normal, de acordo com o formato dd/mm/yyyy
tipo: 11/11/2011

A mesma data que fica com o datepicker, pois no javascript apesar da data esta no formato dd/mm/yy, no jsp ela vira dd/mm/yyyy.

drsmachado

E você debugou a action e verificou se a data chega até este objeto?

R

O erro, acredito eu, é q nessa linha Data:<cal:campoData id=“data”></cal:campoData> da jsp vc está passando o id como data.

E na tag vc está esquecendo de colocar o nome do objeto q tem esse campo, por exemplo:

Aqui
[color=red][/color] deveria ser , , no caso do exercício da apostila caelum fica

Espero ter ajudado.
Abç

Hebert_Coelho

Renan Passos:
name=“modelo.${id}” />
name=“tarefa.${id}”

soh uma correção, o correto seria #{modelo.id} e #{tarefa.id}.

R

jakefrog:
Renan Passos:
name=“modelo.${id}” />
name=“tarefa.${id}”

soh uma correção, o correto seria #{modelo.id} e #{tarefa.id}.

Também sou iniciante em java para web. Testei este modo #{tarefa.id} e não funcionou, porém do jeito q coloquei anteriormente funciona.

Abç

Criado 3 de fevereiro de 2012
Ultima resposta 12 de mar. de 2012
Respostas 13
Participantes 4