Transferência de objeto

8 respostas
betonit

Fala pessoal,

Estou tentando transferir um objeto instaciado em meu Servlet para um jsp no escopo de request. Após isso, kero pegar esse mesmo objeto e transferir para um outro Servlet tb no escopo de request. No entanto, essa última passagem (jsp -> servlet) eu n estou obtendo sucesso onde meu objeto chega com valor [b]null[/b].

Eis o code:

Servlet1:

pagina.jsp (Sendo que aki eu n tenho um “dispatcher”, pois este jsp é um form que acessa outra página através de sua “action”):

Servlet2:

Desde já agradeço,
[]'s

8 Respostas

C

Olá
Você já viu se na segunda citação dentro do jsp:

request.getAttribute("anuncianteAntigo"));

Este código já vem com objeto ou null ? :wink:

Até mais.
Fabrício Luis
http://www.ce3po.com

betonit

Infelizmente sim!

C

Olá Carlos Alberto,

Porque você não tenta para o escopo de sessão em vez do somente request.

request.getSession().setAttribute()

e veja se dar certo. :slight_smile:

Até mais.
Fabrício Luis
http://www.ce3po.com

betonit

acho desnecessario criar um obj de sessao (gastar memoria no servidor) pra funcionalidade que quero usar essa transferencia…

caiofilipini

O problema é o seguinte: a request HTTP termina quando o servidor termina de processar os dados e monta toda a resposta que deve ser enviada ao cliente (ou alguma coisa parecida com isso).

Quando você usa ‘request.setAttribute(bla bla bla)’ no JSP, o servidor ainda não terminou de processar a request (o JSP é processado no servidor, e o resultado do processamento é enviado ao cliente, lembra?). Ou seja, você está colocando um mesmo atributo duas vezes na mesma request!

Acho que ficou meio confuso…

De qualquer forma, você vai mesmo precisar usar escopo de sessão. Insira o objeto na sessão, e depois de usá-lo no Servlet, remova-o. Isso não vai gastar tanta memória assim. :wink:

[]'s

betonit

O problema é o seguinte: a request HTTP termina quando o servidor termina de processar os dados e monta toda a resposta que deve ser enviada ao cliente (ou alguma coisa parecida com isso).

Quando você usa ‘request.setAttribute(bla bla bla)’ no JSP, o servidor ainda não terminou de processar a request (o JSP é processado no servidor, e o resultado do processamento é enviado ao cliente, lembra?). Ou seja, você está colocando um mesmo atributo duas vezes na mesma request!

Acho que ficou meio confuso…

De qualquer forma, você vai mesmo precisar usar escopo de sessão. Insira o objeto na sessão, e depois de usá-lo no Servlet, remova-o. Isso não vai gastar tanta memória assim. :wink:

[]'s

Pois é caio. Mas me deram uma idéia de utilizar uma solucao com input hidden (pq meu jsp eh um form) mas n to conseguindo, mesmo assim, recuperar o obj no servlet. Pq será?

Obrigado!

pcalcado

Não vai adiantar você colocar um objeto em request aqui, porque, como disse o Caio, o request vai ser eliminado assim que a JSP for processada, não deixando você a recuperar no servlet 2(lá é outro objeto request).

Faça algo assim: coloque o código do seu anunciante num campo HTML (ou passe direto na URL, depende do caso) e recupere no servlet 2:

JSP:

<FORM blablabla>
 <INPUT TYPE="HIDDEN" NAME="codAnunciante" VALUE="<%=anuncianteAntigo.getCodigo()%>">
</FORM>

Servlet 2:

Anuciante anuncianteAntigo = new Anunciante(); //Você também poderia pegar direto da persistência, depende do caso
anuncianteAntigo.setCodigo(request.getParameter("codAnunciante"));

Guarde em escopo de sessão apenas objetos que devam ser persistente, não para trocar de uma página para um servlet, etc., para isso existe request :wink:

[]s

betonit

“pcalcado”:
“betonit”:

Servlet1:

pagina.jsp (Sendo que aki eu n tenho um “dispatcher”, pois este jsp é um form que acessa outra página através de sua “action”):

Não vai adiantar você colocar um objeto em request aqui, porque, como disse o Caio, o request vai ser eliminado assim que a JSP for processada, não deixando você a recuperar no servlet 2(lá é outro objeto request).

Faça algo assim: coloque o código do seu anunciante num campo HTML (ou passe direto na URL, depende do caso) e recupere no servlet 2:

JSP:

<FORM blablabla>
 <INPUT TYPE="HIDDEN" NAME="codAnunciante" VALUE="<%=anuncianteAntigo.getCodigo()%>">
</FORM>

Servlet 2:

Anuciante anuncianteAntigo = new Anunciante(); //Você também poderia pegar direto da persistência, depende do caso
anuncianteAntigo.setCodigo(request.getParameter("codAnunciante"));

Guarde em escopo de sessão apenas objetos que devam ser persistente, não para trocar de uma página para um servlet, etc., para isso existe request :wink:

[]s

Isso tb da no mesmo q eu passar o valor por get entao:

....?codAnunciante=xxxx

Valeuz shoes!

Criado 31 de outubro de 2004
Ultima resposta 5 de nov. de 2004
Respostas 8
Participantes 4