rogelgarcia:
Acho que tá rolando uma confusão aí… não existe tempo de sobrevivencia dos objetos no arraylist… eles ficam lá… até nao tem nenhuma referencia mais para eles…
O que pode tá acontecendo… é que em determinado local do seu programa… vc está insntanciando o objeto que guarda o arraylist denovo…
Assim, o objeto que contia os dados… é perdido… dando lugar ao novo objeto… que tem o arraylist vazio…
É uma hipótese…
Então Rogel,
Eu realmente insiro o objeto da ArrayList<> com um add mesmo, as vezes reutilizo essa arraylist em outros lugares, mas de qualquer forma ela fica armazenada na memória… abaixo segue o código de um Servlet e da classe que adiciona os objetos…
Servlet
package servlets;
import java.io.IOException;
import java.util.ArrayList;
import javabeans.Banco;
import javabeans.Marca;
import javabeans.Modelo;
import javabeans.Veiculo;
import javabeans.VeiculoOnibus;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ServletCaminhao
*/
public class ServletOnibus extends HttpServlet
{
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletOnibus()
{
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processar(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processar(request, response);
}
/**
* Faz o processamento da requisição
*
* @param request Requisição HTTP
* @param response Resposta do Servlet
* @throws ServletException
* @throws IOException
*/
private void processar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String operacao = request.getParameter("ope");
String url = "/index.jsp";
if (operacao.equals("regonibus"))
{
url = incluirCarro(request, response);
}
else if (operacao.equals("relonibus"))
{
url = relatorioOnibus(request, response);
}
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(request, response);
}
/**
* Inclui um novo carro e retorna a URL com a página de sucesso na inclusão
*
* @param request Requisição HTTP
* @param response Resposta do Servlet
* @return A url da página de sucesso
* @throws ServletException
* @throws IOException
*/
private String incluirCarro(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//Veiculo
int id = 0;
String cor = "";
int numeroChassi = 0;
String numeroPlaca = "";
int idModelo = 0;
String descricaoModelo = "";
int idMarca = 0;
String descricaoMarca = "";
//VeiculoCarro
int numeroPassageiros= 0;
String itinerario = "";
try {
id = Integer.parseInt(request.getParameter("id"));
cor = request.getParameter("cor");
numeroChassi = Integer.parseInt(request.getParameter("numerochassi"));
numeroPlaca = request.getParameter("numeroplaca");
//modelo
idModelo = Integer.parseInt(request.getParameter("idmodelo"));
descricaoModelo = request.getParameter("descricaomodelo");
//marca
idMarca = Integer.parseInt(request.getParameter("idmarca"));
descricaoMarca = request.getParameter("descricaomarca");
//exclusivo onibus
numeroPassageiros = Integer.parseInt(request.getParameter("numeropassageiros"));
itinerario = request.getParameter("itinerario");
}
catch (NumberFormatException nfe) {
request.setAttribute("erro", nfe);
}
catch (NullPointerException nlfe) {
request.setAttribute("erro", nlfe);
}
VeiculoOnibus onibus = new VeiculoOnibus();
Marca marca = new Marca();
Modelo modelo = new Modelo();
onibus.setId(id);
onibus.setCor(cor);
onibus.setNumeroChassi(numeroChassi);
onibus.setNumeroPlaca(numeroPlaca);
//exclusivo onibus
onibus.setNumeroPassageiros(numeroPassageiros);
onibus.setItinerario(itinerario);
//Marca que o modelo possui
marca.setId(idMarca);
marca.setDescricaoMarca(descricaoMarca);
//Modelo
modelo.setId(idModelo);
modelo.setDescricaoModelo(descricaoModelo);
modelo.setMarca(marca);
//Adiciona objeto modelo ao setModelo
onibus.setModelo(modelo);
Banco.incluirVeiculo(onibus);
return "/okonibus.jsp";
}
/**
* Gera um relatório de ônibus, e retorna a URL da página
*
* @param request Requisição HTTP
* @param response Resposta do Servlet
* @return A URL para redirecionamento
* @throws ServletException
* @throws IOException
*/
private String relatorioOnibus(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
//Atribuir a nova ArrayList somente VeiculoCaminhão
ArrayList<Veiculo> vetorOnibus = new ArrayList<Veiculo>();
//Obs, se o objeto acima for VeiculoCaminhao, deve ser feito o Cast
for (int i = 0; i < Banco.getVeiculo().size(); i++) {
if (Banco.getVeiculo().get(i) instanceof VeiculoOnibus) {
vetorOnibus.add(Banco.getVeiculo().get(i));
}
}
request.setAttribute("onibus", vetorOnibus); //Objeto implícito de Servlets, armazena somente do escopo de requisição
return "/relonibus.jsp";
}
}
package javabeans;
import java.util.ArrayList;
/**
* Banco de dados utilizado na aplicação
*
* @author Grupo
*/
public class Banco
{
static ArrayList<Veiculo> vetorVeiculos = new ArrayList<Veiculo>();
/**
* Recebe objeto do tipo Veículo e insere em uma ArrayList
* @param veiculo
*/
public static void incluirVeiculo(Veiculo veiculo)
{
vetorVeiculos.add(veiculo);
mostraVeiculo();
}
/**
* Função de debug para exibir o ID do veículo
*/
public static void mostraVeiculo()
{
for (int i = 0; i < vetorVeiculos.size(); i++) {
System.out.println(vetorVeiculos.get(i).getId());
}
}
/**
* Pega o vetor de veículos
* @return ArrayList O vetor com os veículos cadastrados
*/
public static ArrayList<Veiculo> getVeiculo()
{
return vetorVeiculos;
}
}