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
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
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.
veja como ta:
[code] <%
//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());
%>[/code]
acho que ele ta criando um novo array na sessão ai fica substituindo.
É, 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.
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 ?
[code] 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);
}[/code]
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.
…
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);
}
[quote=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);
}
[/quote]
É 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.
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…
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.
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 ?
A intenção é botar uma vez só e o objeto ficar la pra “sempre”, daí você sempre vai usar o mesmo objeto.
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 … =)