Foros del Web » Programación para mayores de 30 ;) » Java »

Problema coger elementos array en servlet

Estas en el tema de Problema coger elementos array en servlet en el foro de Java en Foros del Web. Hola, quiero en un servlet, crear unas listas de tipo dto, donde guardar varios dto y luego poder acceder a sus campos para mostrarlos depués ...
  #1 (permalink)  
Antiguo 30/03/2009, 08:57
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Problema coger elementos array en servlet

Hola, quiero en un servlet, crear unas listas de tipo dto, donde guardar varios dto y luego poder acceder a sus campos para mostrarlos depués en la página jsp. Pero cuando llega a "accountint[i] = accounts.getAccountnumber();" me dá un error java.lang.NullPointerException, y la verdad no lo comprendo, creo que lo que le estoy diciendo es que me meta en accountint[i] (que es el elemento i de la lista accountint) el valor del campo Accountnumber de mi dto accounts, que no debería estar vacío, porque se supone que debe contener el elemento i de la lista accountlist. Parte del servlet es:

...
public class DarBajaClienteServlet extends HttpServlet {

private boolean initialized;
private ArrayList initErrors;
private HttpServlet servlet;
private clientsFacadeHome clientHome;
private accountsFacadeHome accountHome;
private balanceFacadeHome balanceHome;
public String RESULT_URL, nif, theJNDIName, name, lastname1, lastname2,address,birthdate, phone, index, creationdate[], accounttype[], account[],concept[], conceptdate[], key[], office[], amount[], amountbalance[];
private int phoneint, indexint, accountint[], keyint[], officeint[], amountint[], amountbalanceint[];
private ArrayList errors, balancelist;
private ArrayList<accountsDto> accountlist;

...

public void populate(HttpServletRequest theRequest) throws NamingException{
nif=theRequest.getParameter("nif");
clientsDto clients = new clientsDto();
accountsDto accounts = new accountsDto();
balanceDto balance = new balanceDto();

Context ctx = getInitialContext();

Object homeclient = ctx.lookup("SCajaElenaClientsEjb");
clientHome = (clientsFacadeHome)homeclient;
clientsFacade clientmethod = null;

Object homeaccount = ctx.lookup("SCajaElenaEjb");
accountHome = (accountsFacadeHome)homeaccount;
accountsFacade accountmethod = null;

Object homebalance = ctx.lookup("SCajaElenaBalanceEjb");
balanceHome = (balanceFacadeHome)homebalance;
balanceFacade balancemethod = null;

try {
try {
clientmethod = clientHome.create();
accountmethod = accountHome.create();
balancemethod = balanceHome.create();

try {
clients.setNif(nif);
clients = clientmethod.ReadByNif(clients);

if (clients!=null)
{
name = clients.getName();
lastname1 = clients.getFirstlastname();
lastname2 = clients.getSecondlastname();
address = clients.getAdress();
birthdate = clients.getBirthday();
phoneint = clients.getTelephone();
indexint = clients.getIndex();

phone = Integer.toString(phoneint);
index = Integer.toString(indexint);

theRequest.setAttribute("name", name);
theRequest.setAttribute("lastname1", lastname1);
theRequest.setAttribute("lastname2", lastname2);
theRequest.setAttribute("address", address);
theRequest.setAttribute("birthdate", birthdate);
theRequest.setAttribute("phone", phone);
theRequest.setAttribute("index", index);

accounts.setNif(nif);
accounts = accountmethod.ReadByNif(accounts);
if (accounts!=null)
{
accountlist = accountmethod.ReadAllByNif(accounts, nif);
System.out.println("Despues de la lista account");
//Y con el for, lo recorro y lo voy modificando
for (int i=0;i<accountlist.size(); i++)
{
accounts = accountlist.get(i);
System.out.println("coge cada miembro de lista");
accountint[i] = accounts.getAccountnumber();
keyint[i]=accounts.getAccountkey();
accounttype[i]=accounts.getAccounttype();
creationdate[i] = accounts.getCreationdate();
officeint[i] = accounts.getOffice();

key[i] = Integer.toString(keyint[i]);
office[i] = Integer.toString(officeint[i]);
account[i]= Integer.toString(accountint[i]);

theRequest.setAttribute("account["+i+"]", account[i]);
theRequest.setAttribute("accounttype["+i+"]", accounttype[i]);
theRequest.setAttribute("creationdate["+i+"]", creationdate[i]);
theRequest.setAttribute("key["+i+"]", key[i]);
theRequest.setAttribute("office["+i+"]", office[i]);

balance.setAccountnumber(accounts.getAccountnumber ());
balance = balancemethod.ReadByAccount(balance);
if (balance!=null)
{
balancelist = balancemethod.ReadByNumber(balance, accounts.getAccountnumber());
System.out.println("después lista balance");
for(int j=0; j<balancelist.size();j++)
{
balance = (balanceDto) balancelist.get(j);
System.out.println("coge miembro lista balance");
amountint[j] = balance.getAmount();
amountbalanceint[j] = balance.getAmountbalance();
concept[j] = balance.getConcept();
conceptdate[j] = balance.getConceptdate();

amount[j] = Integer.toString(amountint[j]);
amountbalance[j] = Integer.toString(amountbalanceint[j]);

theRequest.setAttribute("amount["+j+"]",amount[j]);
theRequest.setAttribute("amountbalance["+j+"]",amountbalance[j]);
theRequest.setAttribute("concept["+j+"]",concept[j]);
theRequest.setAttribute("conceptdate["+j+"]",conceptdate[j]);
}
}
else
{
System.out.println("No hay movimientos");
}
}
}
else
{
System.out.println("No hay cuentas");
}
RESULT_URL = "/JSP/ConfirmBajaCliente.jsp";
}
else
{
RESULT_URL = "/HTML/3.BajaCliente/NoExisteCliente-Elim.html";
}
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (CreateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (RemoteException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}

....

Lo que en realidad busco es poder mostrar los valores de esas listas posteriormente en una página jsp. A lo mejor estoy complicándolo mucho. ¿Podéis echarme un cable? Muchas gracias, un saludo
  #2 (permalink)  
Antiguo 31/03/2009, 04:03
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema coger elementos array en servlet

Wenas

Donde tienes inicializado el array acountint??

Saludos.

PD. lo mismo con el resto de los arrays
  #3 (permalink)  
Antiguo 02/04/2009, 14:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema coger elementos array en servlet

Hola, tienes toda la razón, no los había inicializado. De todos modos lo he cambiado un poco, y parece que me sale todo menos una cosa:

...
private boolean initialized;
private ArrayList initErrors;
private HttpServlet servlet;
private clientsFacadeHome clientHome;
private accountsFacadeHome accountHome;
private balanceFacadeHome balanceHome;
public String RESULT_URL, cliente, cuenta, operaciones, nif, theJNDIName, name, lastname1, lastname2, address, phone, birthdate, index,
account, key,creationdate, office, accounttype, amount, amountbalance, concept, conceptdate;
private int phoneint, indexint, accountint, keyint, officeint, amountint, amountbalanceint;
private ArrayList<accountsDto> accountslist;
private ArrayList<balanceDto> balancelist;
private ArrayList<String> stringaccountlist, stringbalancelist, allbalancelist;
private ArrayList errors;

...

public void populate(HttpServletRequest theRequest) throws NamingException{
nif=theRequest.getParameter("nif");
clientsDto clients = new clientsDto();
accountsDto accounts = new accountsDto();
balanceDto balance = new balanceDto();

Context ctx = getInitialContext();

Object homeclient = ctx.lookup("SCajaElenaClientsEjb");
clientHome = (clientsFacadeHome)homeclient;
clientsFacade clientmethod = null;

Object homeaccount = ctx.lookup("SCajaElenaEjb");
accountHome = (accountsFacadeHome)homeaccount;
accountsFacade accountmethod = null;

Object homebalance = ctx.lookup("SCajaElenaBalanceEjb");
balanceHome = (balanceFacadeHome)homebalance;
balanceFacade balancemethod = null;

try {
try {
clientmethod = clientHome.create();
accountmethod = accountHome.create();
balancemethod = balanceHome.create();

accountslist = new ArrayList<accountsDto>();
stringaccountlist = new ArrayList<String>();
allbalancelist = new ArrayList<String>();

try {
clients.setNif(nif);
clients = clientmethod.ReadByNif(clients);

if (clients!=null)
{
name = clients.getName();
lastname1 = clients.getFirstlastname();
lastname2 = clients.getSecondlastname();
address = clients.getAdress();
phoneint = clients.getTelephone();
indexint = clients.getIndex();
birthdate = clients.getBirthday();

phone = Integer.toString(phoneint);
index = Integer.toString(indexint);

cliente = "Nombre y apellidos: "+name+" "+lastname1+" "+lastname2+", nif: "+nif+
", direccion: "+address+", telefono de contacto: "+phone+", fecha de nacimiento: "+
birthdate+" e identificacion en bbdd: "+index+".";

theRequest.setAttribute("cliente", cliente);

accounts.setNif(nif);
accounts = accountmethod.ReadByNif(accounts);
if (accounts!=null)
{
accountslist = accountmethod.ReadAllByNif(accounts, nif);
//Y con el for, lo recorro y lo voy modificando
for (int i=0;i<accountslist.size(); i++)
{
accounts = accountslist.get(i);

accountint = accounts.getAccountnumber();
keyint = accounts.getAccountkey();
officeint = accounts.getOffice();
accounttype = accounts.getAccounttype();
creationdate = accounts.getCreationdate();

account = Integer.toString(accountint);
key = Integer.toString(keyint);
office = Integer.toString(officeint);

cuenta = "Numero de cuenta: "+account+", clave: "+key+", nif del cliente: "+nif+
", numero de oficina: "+office+", tipo de cuenta: "+accounttype+" y fecha de creacion: "+creationdate+".";

stringaccountlist.add(cuenta);

balance.setAccountnumber(accounts.getAccountnumber ());
balance = balancemethod.ReadByAccount(balance);
if (balance!=null)
{
balancelist = new ArrayList<balanceDto>();
stringbalancelist= new ArrayList<String>();
balancelist = balancemethod.ReadByNumber(balance, accounts.getAccountnumber());
for(int j=0; j<balancelist.size();j++)
{
balance = balancelist.get(j);

amountint = balance.getAmount();
amountbalanceint = balance.getAmountbalance();
concept = balance.getConcept();
conceptdate = balance.getConceptdate();

amount = Integer.toString(amountint);
amountbalance = Integer.toString(amountbalanceint);

operaciones = "Numero de cuenta: "+account+", importe inicial: "+amount+", importe final: "+
amountbalance+", concepto del importe: "+concept+" y fecha de la operacion: "+conceptdate+".";

stringbalancelist.add(operaciones);
}
allbalancelist.addAll(stringbalancelist);
}
else
{
operaciones = "No hay movimientos para esta cuenta";
stringbalancelist.add(operaciones);
allbalancelist.addAll(stringbalancelist);
}
}
}
else
{
cuenta = "No hay cuentas para este cliente";
stringaccountlist.add(cuenta);
}
theRequest.setAttribute("cliente", cliente);
theRequest.setAttribute("stringaccountlist",string accountlist);
theRequest.setAttribute("allbalancelist", allbalancelist);

RESULT_URL = "/JSP/ConfirmBajaCliente.jsp";
}
else
{
RESULT_URL = "/HTML/3.BajaCliente/NoExisteCliente-Elim.html";
}

El problema ahora es que necesito que allbalancelist sea una lista de listas, es decir, que sea una lista donde cada elemento sea a su vez otra lista. ¿Sábes como podría definirlo? ¿Tal vez con un List allbalancelist = new ArrayList();?
Muchas gracias, un saludo
  #4 (permalink)  
Antiguo 03/04/2009, 02:22
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema coger elementos array en servlet

Claro, no hay ningun problema.

Código:
ArrayList allbalancelist = new ArrayList();
allbalancelist.add(lista1);
allbalancelist.add(lista2);
....
Y para recuperarlos

Código:
 for (int i=0;i<allbalancelist.size();i++)
     ArrayList lista = (ArrayList) allbalancelist.get(i);
Saludos.
  #5 (permalink)  
Antiguo 03/04/2009, 04:16
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema coger elementos array en servlet

Hola, perdona pero no lo entiendo. Con recuperar datos te refieres a la pagina jsp, ¿cierto? Pues solo consigo recuperar el primer valor de cada lista, el resto no salen, es más, de la segunda lista, me sale el primer valor dos veces. En el servlet he cambiado la definición de allbalancelist:

...
private ArrayList<String> stringaccountlist, stringbalancelist;
private ArrayList errors, allbalancelist;
...
if (clients!=null)
{
name = clients.getName();
lastname1 = clients.getFirstlastname();
lastname2 = clients.getSecondlastname();
address = clients.getAdress();
phoneint = clients.getTelephone();
indexint = clients.getIndex();
birthdate = clients.getBirthday();

phone = Integer.toString(phoneint);
index = Integer.toString(indexint);

cliente = "Nombre y apellidos: "+name+" "+lastname1+" "+lastname2+", nif: "+nif+
", direccion: "+address+", telefono de contacto: "+phone+", fecha de nacimiento: "+
birthdate+" e identificacion en bbdd: "+index+".";

theRequest.setAttribute("cliente", cliente);

accounts.setNif(nif);
accounts = accountmethod.ReadByNif(accounts);
if (accounts!=null)
{
accountslist = accountmethod.ReadAllByNif(accounts, nif);
//Y con el for, lo recorro y lo voy modificando
for (int i=0;i<accountslist.size(); i++)
{
accounts = accountslist.get(i);

accountint = accounts.getAccountnumber();
keyint = accounts.getAccountkey();
officeint = accounts.getOffice();
accounttype = accounts.getAccounttype();
creationdate = accounts.getCreationdate();

account = Integer.toString(accountint);
key = Integer.toString(keyint);
office = Integer.toString(officeint);

cuenta = "Numero de cuenta: "+account+", clave: "+key+", nif del cliente: "+nif+
", numero de oficina: "+office+", tipo de cuenta: "+accounttype+" y fecha de creacion: "+creationdate+".";

stringaccountlist.add(cuenta);

balance.setAccountnumber(accounts.getAccountnumber ());
balance = balancemethod.ReadByAccount(balance);
if (balance!=null)
{
balancelist = new ArrayList<balanceDto>();
stringbalancelist= new ArrayList<String>();
balancelist = balancemethod.ReadByNumber(balance, accounts.getAccountnumber());
for(int j=0; j<balancelist.size();j++)
{
balance = balancelist.get(j);

amountint = balance.getAmount();
amountbalanceint = balance.getAmountbalance();
concept = balance.getConcept();
conceptdate = balance.getConceptdate();

amount = Integer.toString(amountint);
amountbalance = Integer.toString(amountbalanceint);

operaciones = "Numero de cuenta: "+account+", importe inicial: "+amount+", importe final: "+
amountbalance+", concepto del importe: "+concept+" y fecha de la operacion: "+conceptdate+".";

stringbalancelist.add(operaciones);
}
allbalancelist.add(stringbalancelist);
}
else
{
operaciones = "No hay movimientos para la cuenta numero "+account+".";
stringbalancelist= new ArrayList<String>();
stringbalancelist.add(operaciones);
allbalancelist.add(stringbalancelist);
}
}
}
else
{
cuenta = "No hay cuentas para este cliente";
stringaccountlist.add(cuenta);
}

theRequest.setAttribute("cliente", cliente);
theRequest.setAttribute("stringaccountlist",string accountlist);
theRequest.setAttribute("allbalancelist", allbalancelist);

RESULT_URL = "/JSP/ConfirmBajaCliente.jsp";
...

y en la pagina jsp:

...
<%
String cliente = (String)request.getAttribute("cliente");
String confnif = (String)request.getAttribute("nif");
java.util.ArrayList<String> accountslist = (java.util.ArrayList<String>)request.getAttribute( "stringaccountlist");
java.util.ArrayList allbalancelist = (java.util.ArrayList)request.getAttribute("allbala ncelist");
%>
...
<% for (int i=0; i<accountslist.size();i++){%>
<tr><td align="left"> <%out.println(accountslist.get(i)); %> </td></tr>"
<% for (int j=0; i<allbalancelist.size(); i++){ %>
<tr><td align="left"> <%out.println(" "+allbalancelist.get(j)); %> </td></tr>
<%} %>
<%} %>
...

no me deja poner en la pagina jsp ArrayList nombre = (ArrayList) request.setAttribute("nombre");, no me reconoce ArrayList, me dice que "ArrayList cannot be resolved to a type". ¿Como podría hacerlo? Muchas gracias, un saludo
  #6 (permalink)  
Antiguo 03/04/2009, 04:53
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 3 meses
Puntos: 10
Respuesta: Problema coger elementos array en servlet

Hombre tendras que declararlo en la jsp.
Código:
<%@ page import="java.util.ArrayList" %>
.

De todos modos si allbalancelist es una 'lista de listas', por que pones??
Código:
<%out.println(" "+allbalancelist.get(j)); %>
Te sacara por pantalla el atributo j de allbalancelist, el cual es un ArrayList, es decir, sacaras por pantalla lo que diga el metodo toString() de la clase ArrayList.

Y este metodo puede que lo que haga es sacarte el primer elemento de la lista, o sacarte los elementos separados por comas, o lo que sea.

La solucion ya te la di.

Saludos.
  #7 (permalink)  
Antiguo 25/05/2009, 06:25
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema coger elementos array en servlet

Hola, perdona pero me hice un lío con lo de las listas, y es que no las declaraba bien en el servlet. Y perdona por no haberte respondido antes. Me has ayudado mucho, gracias por todo, y un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.