não consigo achar o erro, ele acontece quando tento alterar alguma tarefa.
INFO: Conectannnnndo ao banco!
INFO: 1
INFO: Primeira Tarefa!!!
INFO: false
WARNING: StandardWrapperValve[springmvc]: PWC1406: Servlet.service() for servlet springmvc threw exception
java.lang.NullPointerException
at br.com.caelum.tarefas.dao.TarefaDAO.altera(TarefaDAO.java:125)
at br.com.caelum.tarefas.controller.TarefasController.altera(TarefasController.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
o jsp de alteração é esse:
[code]<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
<%@taglib uri=“http://java.sun.com/jsp/jstl/fmt” prefix=“fmt”%>
<%@ taglib tagdir="/WEB-INF/tags" prefix=“listagem” %>
<c:import url="…/header.jsp" />
<c:forEach var="tarefa" items="${tarefas}">
<h1>Alterar Tarefa - ${tarefa.id}</h1>
<form action="alteraTarefa" method="post" varStatus="id">
<p class="form1">
<label>Descrição:</label>
<textarea name="descricao" class="textarea">${tarefa.descricao}</textarea>
</p>
<p class="form1">
<label>Finalizado?</label>
<input type="checkbox" name="finalizado" value="true" ${tarefa.finalizado ? 'checked' : ''} />
</p>
<p class="form1">
<label>Data de Finalização:</label>
<fmt:formatDate value="${tarefa.dataFinalizacao.time}" pattern="dd/MM/yyyy" />
<listagem:campoData id="dataFinalizacao" />
</p>
<p class="form1-but">
<input type="hidden" name="id" value="${tarefa.id}" />
<input type="submit" value="Alterar" class="but" />
</p>
</form>
</c:forEach>
<br clear="all" />
<c:import url="…/footer.jsp" />[/code]
quando clico em alterar ele chama o controller:
[code]@RequestMapping(“alteraTarefa”)
public String altera(@Valid Tarefa tarefa, BindingResult result) {
if (result.hasErrors()) { // erro no formulario inteiro
return "tarefa/formulario";
}
TarefaDAO dao = new TarefaDAO();
dao.altera(tarefa);
return "index";
}[/code]
que chama o DAO:
[code]public void altera(Tarefa tarefa) {
System.out.println(tarefa.getId());
System.out.println(tarefa.getDescricao());
System.out.println(tarefa.isFinalizado());
System.out.println(tarefa.getDataFinalizacao().getTimeInMillis());
try {
String sql = "UPDATE tarefas SET descricao=?, finalizado=?, dataFinalizacao=? WHERE id=?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, tarefa.getDescricao());
stmt.setBoolean(2, tarefa.isFinalizado());
if(tarefa.getDataFinalizacao() != null) {
stmt.setDate(3, new Date(tarefa.getDataFinalizacao().getTimeInMillis()));
} else {
stmt.setDate(3, null);
}
stmt.setLong(4, tarefa.getId());
stmt.execute();
stmt.close();
System.out.println("DADOS ALTERADOS COM SUCESSO!");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}[/code]
o println mostra que os valores estão sendo passados.
alguém pode me ajudar a encontrar o problema?
obrigado.