[Resolvido]ArrayList criando todas vezes que eu abro a pagina jsp ela cria umArrayList

16 respostas
F

Como criar o arrayList apenas ums vez ? se eu colocar dentro de um if só para criar… eu não posso usar ele em outro lugar para add…
Quando eu abro a página ele ja cria… quando atualiza ele cria de novo

16 Respostas

Link_pg

Olá!

Nesse caso você pode usar o objeto session (HttpSession):

<%
ArrayList lista = (ArrayList) session.getAttribute("minhaLista");
if(lista == null) {
    lista = new ArrayList();
}
lista.add(...);
%>

Essa lista está disponível para qualquer página (e qualquer servlet), durante uma sessão aberta por esse cliente.
Algo em português aqui e em inglês aqui.

Abraços

F

mas o arrayList fica solto na classe mesmo é? ele não vai ficar criando e zerando o array todas as vezes que eu criar um novo ?

outra dúvida… como posso add o objeto no array…

assim: array.add(obj);

ou assim:

array.add(1,obj);

outra dúvida… como faço parra exibir o array em outra página… ? comofica o get session na outra página…

responda aew por favor. vale 1 ponto … ate meia noite… tou a um tempão tentando fazer isso.

F

veja como ta:

<%
//Iniciar o JSP.

        //Testando se a sessão ainda existe, caso não exista ... volte para página de login e  o Login.
        if(session.getAttribute("sessionLogin") == null){
            response.sendRedirect("index.jsp");
            }

                    //Criando ArrayList do tipo ClasseCadastro.

        %><%   ArrayList<ClasseCadastro> arrayCad = new ArrayList<ClasseCadastro>();%><%


                    //Ação quando clicar no botão cadastrar.
                    String cadastrar = String.valueOf(request.getParameter("bCadastrar"));
                    if (cadastrar.equalsIgnoreCase("Cadastrar")) {
                      
                  
                        //Criando variáveis.
                        String nome = "";
                        String email = "";
                        double nota_1 = 0;
                        double nota_2 = 0;
                        double nota_3 = 0;
                        double media;

                        //Inserindo valores nas variáveis.
                        nome = String.valueOf(request.getParameter("nome"));
                        email = String.valueOf(request.getParameter("email"));
                        nota_1 = Double.parseDouble(request.getParameter("nota1"));
                        nota_2 = Double.parseDouble(request.getParameter("nota2"));
                        nota_3 = Double.parseDouble(request.getParameter("nota3"));
                        media = (nota_1 + nota_2 + nota_3) / 3;

                        //Instanciando a classe.
                        ClasseCadastro clasCad = new ClasseCadastro(nome, media, email);

                            arrayCad.add(clasCad);
                             session.setAttribute("arrayNaSessao", arrayCad);
}

                           
                 

                         

                    
                      
                    //Ação quando clicar no botão Listar.
                    String lista = String.valueOf(request.getParameter("bListar"));
                    if(lista.equalsIgnoreCase("Listar")){


                        response.sendRedirect("exibirCadastro.jsp");

                        }

out.println(arrayCad.size());

        %>
F

acho que ele ta criando um novo array na sessão ai fica substituindo.

Link_pg

É, essa linha aqui tem que ser substituida por um código igual ao que eu coloquei ali:

ArrayList<ClasseCadastro> arrayCad = new ArrayList<ClasseCadastro>();

Isso faz criar toda vez que você ve a página, mas você só pode criar quando ele for nulo na sessão.

F

vou tentar aqui.. agora.. como faço para exibir o array da
sessão em outra página... ?

então na página de cadastro ficará assim ?

ArrayList lista = (ArrayList) session.getAttribute("arrayNasessao");
                        if (lista == null) {
                            lista = new ArrayList();
                        }
                        lista.add(session.getAttribute("arrayNaSessao"));
                        session.setAttribute("arrayNaSessao", lista);
                        lista.add(clasCad);
                        session.setAttribute("arrayNaSessao", lista);

                    }
Link_pg

Cara, desculpa, agora vi que faltava coisa:

<%
ArrayList lista = (ArrayList) session.getAttribute("minhaLista");
if(lista == null) {
    lista = new ArrayList();
    session.setAttribute("minhaLista", lista);
}
lista.add(...);
%>

// pra pegar em outra página, você simplesmente faz
<%
ArrayList lista = (ArrayList) session.getAttribute("minhaLista");
%>

Lê o código com calma que você vai entender.

F

F

Está funcionando agora =)

Desculpe, mastem como vc explicar esse código ?
É assim? Tipo… lista vai receber o array da sessão ne isso? mas se eu ainda nao setei uma sessão. o.0
verifica: se lista for null então cria um ArrayList lista e seta um arrayList() na sessão.
A primeira execução ele vai entrar no if pra criar um array e uma sessão acertei ? bom… se sim … então depois add o obj noarray lista.add(clasCad);
se ele ta add o objeto no array … como ele ta enviando pra sessão ? entrando no if de novo ?

ArrayList lista = (ArrayList) session.getAttribute("arrayNaSessao");
                      
                       if (lista == null) {
                            lista = new ArrayList();
                            session.setAttribute("arrayNaSessao", lista);
                        }

                        lista.add(clasCad);
                    }
F

felipevs:
Está funcionando agora =)

desculpe… mas deixe eu ver se eu entendi… ele vai entrar no if criar um array e uma sessao… (pq o array nao existe ne isso?) mas depois quando nao for mais null… como ele vai setar um novo valor no array ?

ArrayList lista = (ArrayList) session.getAttribute("arrayNaSessao");
                      
                       if (lista == null) {
                            lista = new ArrayList();
                            session.setAttribute("arrayNaSessao", lista);
                        }

                        lista.add(clasCad);
                    }

Link_pg

É assim:

ArrayList lista = (ArrayList) session.getAttribute("arrayNaSessao");

Esse código tenta pegar a lista na sessão. Se tiver, ele pega e bota na variável lista, se não tiver, ele bota null na lista.

if (lista == null) {
    lista = new ArrayList();
    session.setAttribute("arrayNaSessao", lista);
}

Daí você verificando isso, consegue criar uma nova lista se ela não existir, já colocando-a na sessão. Na próxima vez que você verificar a sessão em busca dessa lista, ela vai estar lá até rolar um session.invalidate() ou ela expirar por tempo (ela tem um tempo de vida - ou inatividade, que é configuravel). Esses conceitos você consegue ver ali nos links que eu te passei, mas pense na sessão como uma área reservada na memória pra você guardar objetos e elas são acessíveis apenas pelo cliente (usuário) que botou o objeto lá nesse espaço. No submarino.com.br por exemplo, quando você coloca um item no carrinho de compras, coloca na verdade na sessão do seu usuário.

F

então ele so entra no if uma vez ne isso ? a sessão não exite.
Se sim.
como ele so entra uma vez… como ele add na sessão o novo valor… se ele so tem o set dentro do if ?

Desculpe… e obrigado pela paciencia… é que comecei a pegar java web agora…

Link_pg

Sim, isso mesmo, ele só entra no if uma vez. Por que? Porque a lista só é nula uma vez, na segunda vez ao invés de ela ser nula, ela vem preenchida com o objeto que você colocou na sessão anteriormente.

F

isso mesmo… mas como ele so entra uma vez … não deveria ter um session.setAttribute(“arrayNaSessao”, lista); fora do if ?
se so tem dentro do if … como ele da um set para o array no segundo cadastro ?

Link_pg

A intenção é botar uma vez só e o objeto ficar la pra “sempre”, daí você sempre vai usar o mesmo objeto.

F

ah! entendi … então não precisa ficar dando Set Seseion toda hora ne… add no objeto e ele vai mandar para sessão…
Cara! Valeu mesmo pela ajuda… consegui terminar o execício … =)

Criado 3 de abril de 2011
Ultima resposta 4 de abr. de 2011
Respostas 16
Participantes 2