Atributo sumindo do request depois de sendRedirect()

7 respostas
dudaskank

olá pessoal

estou com problemas, estou testando a displaytag mas não consegui fazer isso, pois tenho uma servlet que cria a coleção e depois da um sendRedirect pra minha jsp, só que quando chega na jsp não há nada no request!

olhem o código:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        Collection teste = new ArrayList();
        for (int i = 0; i < 50; i++) {
            teste.add(new Teste((int)(Math.random() * 1000)));
        }
        System.out.println(teste.size());
        request.setAttribute("test", teste);
        System.out.println(request.getAttribute("test"));
        response.sendRedirect("displaytag.jsp");
    }

a saída dele no console do tomcat aparece o 50 e minha lista que mandei imprimir usando o System.out.println(); mas então no jsp, que segue aqui:

<p> <display:table name="test" /></p>
        <p> <%= request.getAttribute("test") %>

aparece...

Nothing found to display.

null

alguém pode me ajudar dizendo o que estou fazendo de errado? obrigado desde já...

tchau

7 Respostas

dudaskank

pessoal, alguma ajuda por favor… não sei o que fazer :-/

aproveitando, se vcs tiverem também algum exemplo semelhante, onde uma servlet gera a coleção e manda pra jsp mostrar, agradeceria também.

flw

thiago.correa

você já tentou colocar os atributos na sessão?!

Daniel_Quirino_Olive

Toda as vezes que você dá um response.sendRedirect, uma nova requisição HTTP é criada. Isso faz com que os atributos de request que você adicionou anteriormente sejam perdidos (pois o seu request estava associado a uma outra requisição HTTP). Para resolver isso, troque o response.sendRedirect por uma RequestDispatcher.forward :wink:

dudaskank

hmm, valeu Daniel, tentarei isso então, muito obrigado pra vc, e obrigado ao thiago por responder também, valeu :slight_smile:

O

Dudas,
Só tome cuidado para vc naum ter problemas como Double Submit. Como o Daniel falou, se vc não quiser setar os valores na sessão, vc pode utilizar o foward e a resposta é dada na mesma requisição HTTP que vc recebeu os dados (via post ou get). O que vai acontecer é que no Browser vai permacer a URL enviada (inclusive com os valores). Se o usuário der um F5 a sua página será submetida novamente com os valores e por exemplo se for um insert que estiver sendo realizado ele acontecerá novamente.
Os browsers em geral dão aquele aviso: “Essa página foi montada com valores recebidos, quer enviar novamente” (alguma coisa do gênero).

Bom, é isso avalie se isso te causa algum problema.

[]´s
renato

dudaskank

valeu o aviso omnias

mas esse double submit também ocorre se, no meu exemplo, tenho uma página que envia os dados pra servlet, a servlet faz as inclusões no caso, e depois manda pra outra jsp. nesse caso, se eu atualizar, ela passa novamente pela servlet?

flw

O

Não, depois do redirect da servlet, se vc atualizar a página ele vai reenviar o request com o endereco do JSP e naum reenvia a requisição para a servlet.

[]´s
renato

Criado 7 de junho de 2006
Ultima resposta 9 de jun. de 2006
Respostas 7
Participantes 4