Bom dia a todos
Estou com um problema e gostaria de mais uma vez contar com a ajuda de todos.
Tenho o seguinte método na class PaisDAO
public Pais getId(long id){
try {
PreparedStatement stmt = this.connection.prepareStatement("select * from pais");
ResultSet rs = stmt.executeQuery();
while(rs.next()){
if(id == rs.getLong("codigo")){
Pais pais = new Pais();
pais.setId(rs.getLong("codigo"));
pais.setNome(rs.getString("nome"));
pais.setSigla(rs.getString("sigla"));
return pais;
}
rs.close();
stmt.close();
connection.close();
}
return null;
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
E também o método
public void alteraPais(Pais pais){
String sqlAltera = "update pais set nome=?, sigla=? where codigo=?";
try {
PreparedStatement stmtAltera = connection.prepareStatement(sqlAltera);
stmtAltera.setString(1, pais.getNome().toUpperCase());
stmtAltera.setString(2, pais.getSigla().toUpperCase());
stmtAltera.setLong(3, pais.getId());
stmtAltera.execute();
stmtAltera.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
Na class PaisController eu tenho:
@RequestMapping("listaPais")
public String listaPais(Model model){
PaisDAO paisDAO = new PaisDAO();
model.addAttribute("paises",paisDAO.getLista());
return "local/listaPais";
}
@RequestMapping("removePais")
public String remove(Pais pais){
PaisDAO paisDAO = new PaisDAO();
paisDAO.removePais(pais);
return "redirect:listaPais";
}
@RequestMapping("mostraPais")
public String mostra (Long id, Model model){
PaisDAO paisDAO = new PaisDAO();
model.addAttribute("paises", paisDAO.getId(id));
return "local/mostraPais";
}
@RequestMapping("alteraPais")
public String altera(Pais pais){
PaisDAO paisDAO = new PaisDAO();
paisDAO.alteraPais(pais);
return "redirect:listaPais";
}
no mostraPais.jsp eu tenho:
<%@ 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"%>
<!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>Mostrando País</title>
</head>
<body>
<h3>Alterando o País - ${pais.id}</h3>
<form action="alteraPais" method="post">
Id: <input type="text" name="pais.id" value="${pais.id}" readonly="readonly"/> <br />
Nome: <input type="text" name="pais.nome" value="${pais.nome}" /> <br />
Sigla: <input type="text" name="pais.sigla" value="${pais.sigla}" maxlength="3" /> <br />
<input type="submit" value="Alterar">
</form>
</body>
</html>
E no listaPais.jsp eu tenho:
<%@ 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"%>
<!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>Sistema Homologação - Lista País</title>
</head>
<body>
<br />
<br />
<table>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Sigla</th>
</tr>
<!--
${paises} vem do model.addAttribute("paises",paisDAO.getLista());
A Coleção items do c:forEach recebe "paises" declarado logo acima
que vem da class PaisController-->
<c:forEach items="${paises}" var="pais" >
<tr>
<td>${pais.id}
<td>${pais.nome}</td>
<td>${pais.sigla}</td>
<td><a href="removePais?id=${pais.id}"><input type="button" value="Remove" /></a></td>
<td><a href="mostraPais?=${pais.id}"><input type="button" value="Altera" /></a></td>
</tr>
</c:forEach>
</table>
<a href="novoPais" > <input type="submit" value="Novo País"></a>
</body>
</html>
Bem! Vamos lá!
A questão é eu não estou conseguindo enviar os dados do País para edição no formulário mostraPais.
Quero que esses dados sejam enviados diretamente para o formulário quando eu clicar no botão alterar referente ao país do listaPais.
Segue a tela de 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.doGet(FrameworkServlet.java:813)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.spring.controller.local.PaisController.mostra(PaisController.java:75)
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.doGet(FrameworkServlet.java:813)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
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.
Eu até estou conseguindo alterar o país se eu alterar o código do PaisController para o código abaixo.
@RequestMapping("mostraPais")
public String mostra (Model model){
Pais pais = new Pais();
model.addAttribute("paises", pais.getId());
return "local/mostraPais";
}
Mas assim, os dados não vão para o formulário mostraPais e eu tenho que digitar desde o código até a sigla.
Como fazer para que esse formulário ao ser exibido já leve consigo os dados do país solicitado?
Até procurei algo sobre aqui no fórum, mas não consegui encontrar.
Desde já agradeço a todos.