Bom galera, é a minha primeira vez aqui, então me desculpem caso eu faça alguma besteira (e sintam-se livres pra me avisar delas). De qualquer modo, estou seguindo a apostila Caelum fj21 de Java Web. No capítulo 9, surgiu o seguinte exercício:
Coloque um link na sua lista-contatos-elegante.jsp que abre a página testa-altera-mvc.jsp passando
o Id do contato que você quer alterar. Deixe o campo Id visível no form mas não alterável. Não
esqueça de passar o campo Id pela requisição. Faça com que os campos do form estejam populados com
os dados do contato a ser editado.
O que eu quero fazer, já que estou na parte de MVC, é utilizar uma lógica que faz a busca do contato que o cliente deseja alterar e utilizar os dados que foram encontrados no BD (que estarão armazenados em um objeto do tipo Contato) para preencher os campos na tela de alteração. O problema é que eu não sei como jogar os dados contidos no meu objeto para a página JSP. Eu sei que posso utilizar a JSTL core, fazendo uso da jsp:useBean para instanciar um dao e fazer a busca na própria página JSP, mas não queria ir por esse caminho. Segue meu código:
Parte do código na JSP que seleciona a Lógica correta
<input type="hidden" name="logica" value="TestaAlteraContatoLogic" />
<input type="submit" value="Alterar" />
<input type="text" name="id" /><br/>
Lógica que obtém o objeto “contato” com os dados utilizáveis.
public class TestaAlteraContatoLogic implements Logica{
public void executa(HttpServletRequest request,HttpServletResponse response) throws Exception{
Contato contato = new Contato();
ContatoDAO dao = new ContatoDAO();
long id = Long.parseLong(request.getParameter("id"));
contato = dao.busca(id);
RequestDispatcher rd = request.getRequestDispatcher("/testa-altera-mvc.jsp");
rd.forward(request, response);
System.out.println("Alterando contato ..." + contato.getNome());
}
}
E esse é o método de busca de um contato no BD dentro da classe ContatoDAO
public Contato busca(long id){
try{
Contato contato = new Contato();
PreparedStatement stmt = this.connection.prepareStatement("select from contatos where id=?");
stmt.setLong(1,id);
ResultSet rs = stmt.executeQuery();
contato.setId(rs.getLong("id"));
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
rs.close();
stmt.close();
return contato;
}catch (SQLException e){
throw new RuntimeException(e);
}
}
Agora, o que eu quero fazer é: após a execução da TestaAlteraContatoLogic eu redirecione para a JSP testa-altera-mvc.jsp onde eu vou ter os campos para alteração do contato previamente preenchidos com os dados do objeto contato. Alguma idéia?