Boa tarde galera.
Estou fazendo um sistema para treinar e não estou conseguindo gravar “UM” dos dados no banco.
Seguem códigos:
Tabela Estado:
private Long id;
private String nome;
private String sigla;
private Pais pais;
// Métodos getter e setter...
Aqui método adiciona da classe EstadoDAO
public void adiciona(Estado estado){
String sqlAdiciona = "insert into estado (nome, sigla, pais) values (?, ?, ?)";
try {
PreparedStatement stmtAdiciona = connection.prepareStatement(sqlAdiciona);
stmtAdiciona.setString(1, estado.getNome().toUpperCase());
stmtAdiciona.setString(2, estado.getSigla().toUpperCase());
stmtAdiciona.setLong(3, estado.getPais().getId());
stmtAdiciona.execute();
stmtAdiciona.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
Agora a classe EstadoController
package br.com.homologacao.jdbc.modelo.spring.controller.local;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import br.com.homologacao.jdbc.modelo.local.Estado;
import br.com.homologacao.jdbc.modelo.local.Pais;
import br.com.homologacao.jdbc.modelo.local.dao.EstadoDAO;
@Controller
public class EstadoController {
@RequestMapping("novoEstado")
public String form(){
return"local/estado/adicionaEstado";
}
@RequestMapping("adicionaEstado")
public String adiciona(Estado estado, Long id){
EstadoDAO estadoDAO = new EstadoDAO();
Pais pais = new Pais();
id = pais.getId(); // Não estou conseguindo receber esse campo diretamente do formulário.
// id = 107L; Mas se ele estiver dessa forma eu consigo gravar o Estado com a FK no banco, mas somente com esse código de País (107L).
pais.setId(id);
estado.setPais(pais);
estadoDAO.adiciona(estado);
return"local/estado/estadoAdicionado";
}
O formulário adicionaEstado.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="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<jsp:useBean id="dao" class="br.com.homologacao.jdbc.modelo.local.dao.PaisDAO"></jsp:useBean>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Adiciona Estado - Homologação</title>
</head>
<body>
<table align="center" border="1">
<tr>
<td>Sistema de Homologação
</tr>
</table>
<h3>Inserindo um novo Estado - Sistema de Homologação</h3>
<form name="adicionaEstado" method="post" action="adicionaEstado">
Nome: <input type="text" name="nome" value="${estado.nome}"/><br />
Sigla: <input type="text" name="sigla" maxlength="2" value="${estado.sigla}"/><br />
País: <select name="id">
<option value="${pais.id}">Selecione o País</option>
<c:forEach items="${dao.lista}" var="pais" >
<option value="${pais.id}">${pais.nome}</option>
</c:forEach>
</select>
<br />
/* Já tentei assim também mas não rolou!
País: <input type="text" name="pais" value="${estado.pais}"/><br />
*/
<input type="submit" value="Adicionar" />
</form>
</body>
</html>
E por fim o erro:
HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException
type Exception report
message Request processing failed; nested exception is java.lang.NullPointerException
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:929)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:824)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:798)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.lang.NullPointerException
br.com.homologacao.jdbc.modelo.local.dao.EstadoDAO.adiciona(EstadoDAO.java:38)
br.com.homologacao.jdbc.modelo.spring.controller.local.EstadoController.adiciona(EstadoController.java:28)
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)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:917)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:824)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:798)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.36 logs.
Apache Tomcat/6.0.36
Os input’s do nome e da sigla estão funcionando normalmente, mas quando chega no pais, trava!
A questão é que esse select ou até mesmo o input pais, não está enviando o valor para o “pais.setId(id);” do Controller
Confesso a vocês que já estou duas noites e três dias sem dormir direito por causa disso.
Já procurei aqui e em outros fóruns mas não encontrei a solução.
Até encontrei algumas pessoas com problemas parecidos e [RESOLVIDOS], mas não postaram a solução encontrada.
Fico no aguardo da ajuda de todos.