Texto do 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 já fiz: Já coloquei o link, passei o id pela requisição e deixei o campo id não alterável.
A dúvida: A classe ContatoDAO que uso possuí um método getContato (recebe um parâmetro id e retorna um objeto Contato), quero usar este método para popular o form. Fiz algumas pesquisas, mas sem sucesso. Já consegui popular mas usando scriptlets. Há uma maneira de fazer isso pelas tags do JSP/JSTL, tal como a tag forEach?
Você conseguiu pesquisar no DAO e agora a dúvida é listar no jsp?
O que vc usa? Vraptor? Servlet?
J
joaormira
Bom dia,
Eu não consegui pesquisar no DAO pelas tags do JSP/JSTL, ficou assim meu código:
<%/* Criação DAO. */ContatoDAOdao=newContatoDAO();/* Recuperação do parâmentro id da requisição e sua conversão para o tipo int. */StringstringId=request.getParameter("id");intid=Integer.parseInt(stringId);SimpleDateFormatformattedDate=newSimpleDateFormat("dd/MM/yyyy");StringfieldSize=String.valueOf(id);%><formaction="mvc"method="post">Id:<inputtype="text"name="id"readonly="readonly"size="<%=fieldSize.length()%>>"value="<%=id%>"><br>Nome:<inputtype="text"name="nome"value="<%=dao.getContato(id).getNome()%>"size="<%=dao.getContato(id).getNome().length()%>"><br>E-mail:<inputtype="text"name="email"value="<%=dao.getContato(id).getEmail()%>"size="<%=dao.getContato(id).getEmail().length()%>"><br>Endereço:<inputtype="text"name="endereco"value="<%=dao.getContato(id).getEndereco()%>"size="<%=dao.getContato(id).getEndereco().length()%>"><br>DatadeNascimento:<inputtype="text"name="dataNascimento"value="<%=formattedDate.format(dao.getContato(id) .getDataNascimento().getTime())%>"size="<%=formattedDate.format( dao.getContato(id).getDataNascimento().getTime()).length()%>"><br><inputtype="hidden"name="logica"value="AlteraContatoLogic"><br><inputtype="submit"value="Gravar"></form>
Abaixo o método getContato do DAO:
publicContatogetContato(intid){Contatocontato=newContato();try{Stringsql="SELECT * FROM contatos WHERE id = "+id;PreparedStatementstatement=connection.prepareStatement(sql);ResultSetset=statement.executeQuery();while(set.next()){// criando o objeto Contatocontato.setId(set.getLong("id"));contato.setNome(set.getString("nome"));contato.setEmail(set.getString("email"));contato.setEndereco(set.getString("endereco"));// montando a data atraves de CalendarCalendardata=Calendar.getInstance();data.setTime(set.getDate("dataNascimento"));contato.setDataNascimento(data);// adicionando o objeto Contato a lista de contatos}set.close();statement.close();returncontato;}catch(Exceptione){// TODO: handle exception}returnnull;}
Quero chamar o método acima, mas por meio de JSP/JSTL.
Renato_Yury
Eu consegui popular o form.
Quase que da mesma forma que fiz para popular uma tabela (lista-contato-elegante).
Fazendo esse esquema a quantidade de contato que tem no banco é lançada na tela, pois o FOR está para todo o formulário.
Para eu pegar só um registro da tabela tenho que lançar o BREAK; ao final da lista no DAO. Mas também vou precisar do método sem o BREAK; para listar os contatos (lista-contato-elegante). Teria que então ter dois list no meu dao, um para mostrar_dados (com o break; ) e outro para listar (sem o break; ). Acho que fica meio que “deselegante”, não sei o certo.
Estou na intenção de lançar um registro por vez no form e com os botões Primeiro Anterior Proximo Ultimo navegar pelos dados.