Dúvida com JSP

Boa Tarde Amigos,

Estou lendo e fazendo os exercícios da apostila da caelum fj21 e cheguei numa parte que estou meio agarrado e gostaria de contar com a ajuda dos amigos do fórum novamente para me esclarecer uma dúvida…

Bom … estou utilizando implementações JSTL e tenho em uma página que lista os meus contatos o seguinte trecho de código:

<form name="editarContato" action="testa-altera-mvc.jsp">
	    <input type="hidden" name="contatoEditar" value="${contato}"/>
            <input type="image" src="<core:url value="imagens/editar.png"/>" />
</form>

onde o ${contato} possui a instância de meu objeto Contato …
o exercício que estou implementando consiste em enviar esses dados para uma outra jsp para realizar a edição dos mesmos…
a idéia que eu tive é de quando o usuário clicar na imagem irá remete-lo a página edita-contato.jsp que possuirá um form com os campos e desejo popula-los com os dados do objeto.

A pergunta é: Como poderei pegar os dados do contato na outra jsp? Eu teria que fazer uma requisição a uma servlet e esta por sua vez através do RequestDispatcher fazer o foward para a página de edição?

Agradeço pela ajuda…

:-o

Carinha, isso tá esquisito: contato é um Objeto???

Deixa eu te explicar porque isso está esquisito: Quando você pega ${contato} em um texto assim, tipicamente o campo em questão é convertido em uma String simples. Provavelmente, o que será postado é uma representação do que Contato.toString() escreveria.

Se você quer passar os dados do contato para outro jsp, você tem que fazê-lo campo a campo, ou então armazenar os dados do contato na sessão…

Entendi,

Eu estou usando por exemplo ${contato.nome} e ele retorna o nome do meu contato corretamente… eu pensei q colocando ${contato} eu obteria a instância do mesmo… e não sua referência da saída do toString();

Mas de qualquer forma obrigado!

Eu axei que haveria um jeito mais simples de fazer isso… sem a necessidade de trafegar campo a campo!

Outra coisinha… que me esqueci …

Como eu faria para buscar os dados que vieram no form pela requisição ??? Seria igual a servlet? request.getParameter(“nome”); por exemplo?

Grato

:smiley:

Carinha, acho que você precisa entender melhor como um formulário HTML funciona.

Primeiro, só pra confirmar, você entendeu o que uma página jsp faz, certo? Ela gera uma saída, tipicamente em HTML, gerada dinamicamente. O trabalho dela acaba aí. E daí quem começa a trabalhar é o browser.

Então, o que acontece quando você chama sua página jsp? O browser vai receber um texto assim:

.
.
.
<form name="editarContato" action="testa-altera-mvc.jsp">
	    <input type="hidden" name="contatoEditar" value="org.blewpefaf.Contato@123415f34"/>
            <input type="image" src="http://seilaoque.com.br/suaapp/imagens/editar.jpg"/>
</form>

Isso é HTML. Simples. O que você vê nesse código:

  1. Quando eu submeter o formulário, ele irá chamar um endereço chamado “http://seilaoque.com.br/suaapp/testa-altera-mvc.jsp”, e tudo o que estiver no formulário será enviado junto.

  2. Este formulário tem um campo hidden, chamado “contatoEditar”, e um botão de submissão, com uma figurinha bunitinha, Sem nome.

Quando você clicar na imagem, ele vai mandar todas essas informações que eu falei na forma de um par <>=<> para o seu servidor web, no endereço indicado…

Aí o que você tem que fazer? No endereço indicado, você pode ver o que veio na requisição, através de comandos request.getParameter(xxx).

Por exemplo, dentro do jsp “testa-altera-mvc.jsp”…

String contato = request.getParameter("contatoEditar");

Um ponto a se ter atenção: a não ser que você guarde alguma coisa na sessão, a primeira página não sabe de nada da segunda página, somente o que foi submetido pelo formulário.

Um exercício interessante para você: crie um arquivo html com esse texto:

<html><head></head><form method="get"><input type="hidden" name="tooculto" value="qwpek"/> <input type="image" name="ipeeee" value="pqkwd" src="blabla.jpg"/></form></html>

Experimente abrir esse arquivo e clicar o botão “x” e veja o que aparece no endereço na sua barra de navegação: os pares “tooculto=qwpek” e “ipeeee.x=” e “ipeeee.y=” aparecerão na barra.

Para saber mais, veja a especificação do HTML 4 http://www.w3.org/TR/html4/interact/forms.html

Um ponto interessante no seu problema é o fato de o contato já estar no servidor, certo?

Porque não simplesmente informar o Id do seu contato e na página de edição recuperá-lo, por exemplo, do banco de dados?

Isto tem várias vantagens:

  1. Segurança: um formulário vai até o cliente, e o cliente pode responder qualquer coisa para o servidor: não é garantido que os dados do contato enviados sejam os mesmos dados recebidos.
  2. Tráfego de rede: Se o seu contato tiver 5000 campos, esses dados vão ter que ser enviados por completo para o cliente, para eles serem depois reenviados para o servidor.

Verdade…

Eu tinha pensado em fazer isso mesmo a princípio… mas era algo que estava me parecendo tão obvio que eu pensei comigo: “Deve haver outra forma de fazer isso, não pode ser tão simples assim” …

Mas creio que eu estava enganado…

Vou utilizar essa saída para ver o resultado…

De qualquer forma… valeu pela ajuda!