Exercício 2 da Pág 97 Apost fj21-caelum

3 respostas
J

Boa noite,

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?

3 Respostas

lelodois

Simmmmm… há sim.

Você conseguiu pesquisar no DAO e agora a dúvida é listar no jsp?

O que vc usa? Vraptor? Servlet?

J

Bom dia,

Eu não consegui pesquisar no DAO pelas tags do JSP/JSTL, ficou assim meu código:

<%
			/* Criação DAO. */
			ContatoDAO dao = new ContatoDAO();
			/* Recuperação do parâmentro id da requisição e sua conversão para o tipo int. */
			String stringId = request.getParameter("id");
			int id = Integer.parseInt(stringId);

			SimpleDateFormat formattedDate = new SimpleDateFormat("dd/MM/yyyy");

			String fieldSize = String.valueOf(id);
		%>

		<form action="mvc" method="post">

			Id: <input type="text" name="id" readonly="readonly"
				size="<%=fieldSize.length()%>>" value="<%=id%>"><br>
			Nome: <input type="text" name="nome"
				value="<%=dao.getContato(id).getNome()%>"
				size="<%=dao.getContato(id).getNome().length()%>"><br>
			E-mail: <input type="text" name="email"
				value="<%=dao.getContato(id).getEmail()%>"
				size="<%=dao.getContato(id).getEmail().length()%>"><br>
			Endereço: <input type="text" name="endereco"
				value="<%=dao.getContato(id).getEndereco()%>"
				size="<%=dao.getContato(id).getEndereco().length()%>"><br>
			Data de Nascimento: <input type="text" name="dataNascimento"
				value="<%=formattedDate.format(dao.getContato(id)
					.getDataNascimento().getTime())%>"
				size="<%=formattedDate.format(
					dao.getContato(id).getDataNascimento().getTime()).length()%>"><br>

			<input type="hidden" name="logica" value="AlteraContatoLogic"><br>

			<input type="submit" value="Gravar">


		</form>

Abaixo o método getContato do DAO:

public Contato getContato(int id) {

		Contato contato = new Contato();

		try {

			String sql = "SELECT * FROM contatos WHERE id = " + id;

			PreparedStatement statement = connection.prepareStatement(sql);

			ResultSet set = statement.executeQuery();

			while (set.next()) {
				// criando o objeto Contato

				contato.setId(set.getLong("id"));
				contato.setNome(set.getString("nome"));
				contato.setEmail(set.getString("email"));
				contato.setEndereco(set.getString("endereco"));

				// montando a data atraves de Calendar

				Calendar data = Calendar.getInstance();
				data.setTime(set.getDate("dataNascimento"));
				contato.setDataNascimento(data);

				// adicionando o objeto Contato a lista de contatos
			}

			set.close();
			statement.close();

			return contato;

		} catch (Exception e) {
			// TODO: handle exception
		}

		return null;

	}

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).

<form action="mvc" method="post">
<c:forEach var="contato" items="${dao.lista}">
		Id:<input type="text" name="id" value="${contato.id}"/><br/>
		Nome:<input type="text" name="nome"  value="${contato.nome}"/><br/>
		E-mail:<input type="text" name="email"  value="${contato.email}"/><br/>
		Endereco:<input type="text" name="endereco"  value="${contato.endereco}"/><br/>
		Data de Nascimento:<input type="text" name="dataNascimento"  value="${contato.dataNascimento}"/><br/>
			
                                   <input type="hidden" name="logica" value="AlteraContatoLogic"/>
		                   <input type="submit" value="Atualizar"/>
</c:forEach>
	</form>

Vamos aos fatos.

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.

Como devo implantar?

Criado 20 de maio de 2011
Ultima resposta 22 de ago. de 2011
Respostas 3
Participantes 3