Retornar dados do Banco para edição

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.

posta pf seu PaisController completo.

att,

Olá pedruhenrik.
Segue PaisController completo:


package br.com.homologacao.jdbc.modelo.spring.controller.local;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import br.com.homologacao.jdbc.modelo.local.Pais;
import br.com.homologacao.jdbc.modelo.local.dao.PaisDAO;



@Controller
public class PaisController {



	@RequestMapping("novoPais")
	public String form(){
		return "local/adicionaPais";
	}

	@RequestMapping("/adicionaPais")


	public String adiciona (@Valid Pais pais, BindingResult result){
		if(result.hasFieldErrors("nome")){
			return "local/adicionaPais";
		}

		if(result.hasFieldErrors("sigla")){
			return "local/adicionaPais";
		}

		PaisDAO paisDAO = new PaisDAO();
		paisDAO.adiciona(pais);
		return "local/paisAdicionado";
	}

	@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 (@RequestParam Long id, Model model){
		PaisDAO paisDAO = new PaisDAO();
		Pais pais = new Pais();
		id = pais.getId();
		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";
		
	}

}

Obrigado

RETIFICANDO!

package br.com.homologacao.jdbc.modelo.spring.controller.local;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import br.com.homologacao.jdbc.modelo.local.Pais;
import br.com.homologacao.jdbc.modelo.local.dao.PaisDAO;


/*
 * Anotação @Controller do Spring indicando que,
 * os métodos dessa classe são "ações"
 * e serão executadas*/
@Controller
public class PaisController {


	/*
	 * A anotação @RequestMapping recebe um
	 * atributo chamado value ("/novoPais") que indica qual
	 * será a URL utilizada para invocar o método,
	 * como esse atributo já é o padrão não precisamos definir.
	 * Nesse caso a URL /ola redirecionará o navegador para o arquivo
	 * adicionaPais.jsp
	 * Não colocamos aqui em baixo a extensão do adicionaPais.jsp porque já dissemos ao spring
	 * que ele deve monitorar todos os arquivos .jsp no seu spring-context.xml
	 * */
	@RequestMapping("novoPais")
	public String form(){
		return "local/adicionaPais";
	}

	@RequestMapping("/adicionaPais")

	/*
	 * A anotação @Valid é quem tem o papel de validar as anotações
	 * dá class Pais.
	 * Na class Pais há as anotações @NotBlank e @Size.
	 * */
	public String adiciona (@Valid Pais pais, BindingResult result){
		if(result.hasFieldErrors("nome")){
			return "local/adicionaPais";
		}

		if(result.hasFieldErrors("sigla")){
			return "local/adicionaPais";
		}

		PaisDAO paisDAO = new PaisDAO();
		paisDAO.adiciona(pais);
		return "local/paisAdicionado";
	}

	@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 (@RequestParam 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";
		
	}

}

O erro que aparece agora é esse:

HTTP Status 400 - Required Long parameter 'id' is not present

type Status report

message Required Long parameter 'id' is not present

description The request sent by the client was syntactically incorrect.