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

[SOLUCIONADO] linkedlist dentro de una lista desplegable no funciona

Estas en el tema de linkedlist dentro de una lista desplegable no funciona en el foro de Java en Foros del Web. Buen dia Tengo una conexion a una bd de oracle y funciona bien dentro de una linkedlist ahora quiero armar una lista desplegable utilizando la ...
  #1 (permalink)  
Antiguo 08/10/2013, 15:46
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
linkedlist dentro de una lista desplegable no funciona

Buen dia

Tengo una conexion a una bd de oracle y funciona bien dentro de una linkedlist
ahora quiero armar una lista desplegable utilizando la lista y no reconoce la variable donde guardo el registro...gracias por su orientacion.

tengo el siguiente codigo :

<%
LinkedList<Registros> lista = Conexion.getContactos();

%>
<form method="POST">
<p>Selecciona una Sucursal y pulsa el botón
<select name="D1" size="lista.size()" >
<c:forEach var="regi" items="${lista}">
<option value=${regi}></option>");
</c:forEach>
</select>
<input type="button" value="Seleccionar";>
</p>
</form>

Última edición por aurelioenriquez; 08/10/2013 a las 15:47 Razón: notificacion por correo
  #2 (permalink)  
Antiguo 08/10/2013, 16:40
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Bien, pues resolvi en parte mi problema utilizando el metodo ITERATOR ...pero cuando despliega los registros de la lista con (ciclox.next()) me trae unos valores muy raros..pensaria que en hexadecimal ..pero no son los datos de la lista...por que?...que estoy haciendo mal?

<form method="POST">
<p>Selecciona una Sucursal y pulsa el botón

<%
LinkedList<Registros> lista = Conexion.getContactos();
Iterator ciclox = lista.iterator();
out.println("<select name=D1>");

while(ciclox.hasNext())
{
out.println("<option>"+ciclox.next()+"</option>");
}
out.println("</select>");

%>
<input type="button" value="Seleccionar"
onclick="alert('La opción seleccionada es: '+D1.options[D1.selectedIndex].text);">
</p>
</form>
  #3 (permalink)  
Antiguo 09/10/2013, 03:17
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

Cita:
Iniciado por aurelioenriquez Ver Mensaje
..pensaria que en hexadecimal ..pero no son los datos de la lista...por que?...que estoy haciendo mal?
Porque estás mostrando el objeto, no las propiedades del objeto. Me explico.

Tienes una lista de tipo Registros:

Código Java:
Ver original
  1. LinkedList<Registros> lista = Conexion.getContactos();

La forma de resolverlo sería, extraer los datos de esos objetos Registros, para eso deberías usar los correspondientes métodos get:

Código Java:
Ver original
  1. Iterator ciclox = lista.iterator();
  2. out.println("<select name=D1>");
  3.  
  4. while(ciclox.hasNext()) {
  5.     Registros reg = ciclox.next();
  6.  
  7.     out.println("<option>"+reg.getLoQueSea()+"</option>");
  8.     }
  9.     out.println("</select>");
  #4 (permalink)  
Antiguo 09/10/2013, 09:56
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Jomauro, gracias por tu apoyo.

Pero si utilizo el metodo lista.get(index).getNombre necesito un valor para "index", pero como lo estoy haciendo dentro de el metodo ITERATOR, no se como asignarle un valor de indice a lista.get(index)... no se si es claro mi problema, por eso pense que con Iterator ciclox = lista.iterator podia momerve dentro de los registros sin necesidad de un contador...Gracias por su ayuda
  #5 (permalink)  
Antiguo 09/10/2013, 11:09
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

No necesitas el index. Fíjate que yo no he puesto el index por ningún lado.

Código Java:
Ver original
  1. out.println("<option>"+reg.getLoQueSea()+"</option>");

el reg.getLoQueSea() se refiere a los métodos getter/setter de la clase Registro que tú indicas en el LinkedList

Código Java:
Ver original
  1. LinkedList<Registros> lista = Conexion.getContactos();

No me refiero al método get del LinkedList que sí necesita un index.

Código Java:
Ver original
  1. get(int index)

Vamos a ver si me explico mejor:

1.- Tienes la clase Registros, voy a suponer que tiene estos datos.

Código Java:
Ver original
  1. public class Registros {
  2.     private int id = 0;
  3.     private String nombre = "";
  4.  
  5.  
  6.     public int getId() {
  7.         return id;
  8.     }
  9.  
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.  
  14.     public String getNombre() {
  15.         return nombre;
  16.     }
  17.  
  18.     public void setNombre(String nombre) {
  19.         this.nombre = nombre;
  20.     }
  21. }

2.- Una vez creado el LinkedList y el Iterator

Código Java:
Ver original
  1. LinkedList<Registros> lista = Conexion.getContactos();
  2. Iterator ciclox = lista.iterator();

recorres el objeto Iterator como te he indicado antes, para visualizar en el jsp por ejemplo el Nombre (recuerda que en este caso el objeto Registros lo he creado yo y no tiene que coincidir con el tuyo).

Código Java:
Ver original
  1. while(ciclox.hasNext()) {
  2.     Registros reg = ciclox.next();
  3.     out.println("<option>"+reg.getNombre()+"</option>");
  4. }


Saludos.


Última edición por jomaruro; 09/10/2013 a las 11:17
  #6 (permalink)  
Antiguo 09/10/2013, 14:32
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Muchas Gracias por tu ayuda JOMARURO.

Entendi perfecto e hice la correccion del caso. De hecho escribi la linea tal como me escribiste:

Registros reg = ciclox.next();

y el objeto "reg" me muestra los metodos propios de mi lista. (por ejemplo "getValor")

Pero me genera un error en la linea "Registros reg = ciclox.next();"
Me dice : "Incompatible types required Registros"

Aqui pego el codigo con los ajustes...

LinkedList<Registros> lista = Conexion.getContactos();
Iterator ciclox = lista.iterator();
out.println("<select name=D1>");

while(ciclox.hasNext()){
Registros reg = ciclox.next();
out.println("<option>" + reg.getValor() + "</option>");
}
out.println("</select>");

Gracias por sus aportes.
  #7 (permalink)  
Antiguo 10/10/2013, 03:32
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

¿Qué datos recoges con getContactos()?

Saludos.

  #8 (permalink)  
Antiguo 10/10/2013, 07:29
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

La Clase Contactos tiene una conexion a una BD de Oracle y para esta lista desplegable traigo unas ciudades.

Me parece extraño que despues de declarar "Registros reg = ciclox.next();"
la variable "reg" hereda los metodos de la clase "Registros" -->
"out.println("<option>" + reg.getValor() + "</option>");"

Pero me saca el error en la linea -->
"Registros reg = ciclox.next();"
Es decir en la linea anterior...
  #9 (permalink)  
Antiguo 10/10/2013, 13:15
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Si sirve de algo me esta mostrando en la lista desplegable :

Conexion.Registros@144caa4
Conexion.Registros@5f0e0c
Conexion.Registros@935af2
etc....

y deberia sacar Nombres de ciudades

En otra clase utilizo un for i=0 etc... y con get(i) los muestra bien, pero como necesito meterlos en la lista y me quedo grande con el for pewnse que con el iterator era mas facil...y ahora estoy patinando en este problema.
  #10 (permalink)  
Antiguo 14/10/2013, 03:07
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

Por favor, muéstrame el código la clase Registros y la clase Conexion.

Saludos.

  #11 (permalink)  
Antiguo 14/10/2013, 12:21
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Gracias jomaruro ahi van...llevo hoy toda la mañana rompiendome el coco....

clase Registros
===========
package Conexion;

/**
*
* @author 79056652
*/
public class Registros {

int id;
int ramo;
String nombre;
double valor;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public int getRamo() {
return ramo;
}
public void setRamo(int ramo) {
this.ramo = ramo;
}

}

clase Conexion
============

package Conexion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

public class Conexion
{
public static LinkedList<Registros> getContactos()
{
LinkedList<Registros> listaContactos = new LinkedList<Registros>();
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
try (Connection conexion1 = DriverManager.getConnection("jdbc:oracle:thin:@10. 10.6.152:1521:intrac",
"XxsV2344", "Xxsv2344")) {
Statement st = conexion1.createStatement();
ResultSet rs = st.executeQuery("select t.epol_jefe_inmediato dir, t.epol_tipo_negocio tp, t.epol_ramo_contable ramon, sum(t.epol_facturado_mes) vlr from LFV_EXT_POLIZAS t where t.epol_ramo_contable in (1,23,34,40) and t.epol_cod_loc_neg=1003 and t.epol_jefe_inmediato=9937 and to_char(t.epol_ano)=2013 and to_char(t.epol_mes)=8 group by t.epol_jefe_inmediato, t.epol_tipo_negocio, t.epol_ramo_contable order by tp, ramon " );
while (rs.next())
{

Registros contacto = new Registros();
contacto.setId(rs.getInt("dir"));
contacto.setNombre(rs.getString("tp"));
contacto.setRamo(rs.getInt("ramon"));
contacto.setValor(rs.getDouble("vlr"));
listaContactos.add(contacto);
}
rs.close();
st.close();
}
}
catch (ClassNotFoundException | SQLException e)
{
}
return listaContactos;
}
}
  #12 (permalink)  
Antiguo 14/10/2013, 13:43
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

El problema está, creo, en que en el LinkedList necesitas un objeto Registro y estás recibiendo un objeto Conexion. Yo lo haría de otra manera.

En la clase conexión dejaría solo la conexión con la base de datos:

Código Java:
Ver original
  1. public class Conexion {
  2.  
  3.     /*
  4.      *      La URL con la cual nos conectarémos a la base de datos.
  5.      */
  6.     private static String url = "jdbc:oracle:thin:@10.10.6.152:1521:intrac";
  7.     /*
  8.      *      El usuario de la base de datos.
  9.      */
  10.     private static String user = "XxsV2344";
  11.     /*
  12.      *      La clave del usuario de la base de datos.
  13.      */
  14.     private static String password = "Xxsv2344";
  15.  
  16.     /*
  17.      *      Método para obtener la conexión con la base de datos.
  18.      */
  19.     public static synchronized Connection getConexion() {
  20.         Connection cn;
  21.         try {
  22.             /*
  23.              *      Cargamos el driver
  24.              */
  25.             Class.forName("oracle.jdbc.driver.OracleDriver");
  26.             /*
  27.              *      Obtenemos la conexión
  28.              */
  29.             cn = DriverManager.getConnection(url, user, password);
  30.         } catch (SQLException e) {
  31.             System.out.println("Error --> " + e);
  32.             cn = null;
  33.         } catch (Exception e) {
  34.             System.out.println("Error --> " + e);
  35.             cn = null;
  36.         }
  37.         return cn;
  38.     }
  39. }

La clase Registro la dejaría tal y como está. El siguiente paso es que crearía otra clase, por ejemplo DBRegistros para todas las operaciones con la clase Registros, donde incluiría la inserción de registros, actualización de registros, borrado de registros y consulta de registros.

Por ejemplo:

Código Java:
Ver original
  1. public class DBRegistros {
  2.     public LinkedList<Registros> getContactos() {
  3.         LinkedList<Registros> listaContactos = new LinkedList<Registros>();
  4.         Connection conn = null;
  5.         try {
  6.             conn = Conexion.getConexion();
  7.         } catch (Exception e) {
  8.             System.out.println(e.getMessage());
  9.         }
  10.         if (conn != null) {
  11.             PreparedStatement ps;
  12.             String consulta;
  13.             consulta = "select t.epol_jefe_inmediato dir, t.epol_tipo_negocio tp, t.epol_ramo_contable ramon, sum(t.epol_facturado_mes) vlr from LFV_EXT_POLIZAS t where t.epol_ramo_contable in (1,23,34,40) and t.epol_cod_loc_neg=1003 and t.epol_jefe_inmediato=9937 and to_char(t.epol_ano)=2013 and to_char(t.epol_mes)=8 group by t.epol_jefe_inmediato, t.epol_tipo_negocio, t.epol_ramo_contable order by tp, ramon ";
  14.             try {
  15.                 ps = conn.prepareStatement(consulta);
  16.                 ResultSet rs = ps.executeQuery();
  17.                 while (rs.next()) {
  18.                     Registro contacto = new Registro();
  19.                     contacto.setId(rs.getInt("dir"));
  20.             contacto.setNombre(rs.getString("tp"));
  21.             contacto.setRamo(rs.getInt("ramon"));
  22.                     contacto.setValor(rs.getDouble("vlr"));
  23.             listaContactos.add(contacto);
  24.                 }
  25.             } catch (SQLException e) {
  26.                 System.out.println(e.getMessage());
  27.             } catch (Exception e) {
  28.                 System.out.println(e.getMessage());
  29.             } finally {
  30.                 try { // cierro la conexion con la base de datos
  31.                     if (conn != null && !conn.isClosed()) {
  32.                         conn.close();
  33.                     }
  34.                 } catch (SQLException e) {
  35.                     System.out.println(e.getMessage());
  36.                 } catch (Exception e) {
  37.                     System.out.println(e.getMessage());
  38.                 }
  39.             }
  40.         }
  41.         return listaContactos;
  42.     }
  43. }

Y por último, donde haces el iterator cambias esta línea:

Código Java:
Ver original
  1. LinkedList<Registros> lista = Conexion.getContactos();

por esta otra:

Código Java:
Ver original
  1. LinkedList<Registros> lista = DBRegistros.getContactos();

Y si no me equivoco debería funcionarte.

Saludos.



P.D.: Es posible que en algunos casos me haya equivocado y haya puesto Registro donde debería poner Registros, supongo que te darás cuenta.
  #13 (permalink)  
Antiguo 15/10/2013, 07:59
 
Fecha de Ingreso: septiembre-2013
Mensajes: 22
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: linkedlist dentro de una lista desplegable no funciona

Eres un Maestro, muchas gracias.

No entiendo por que funciono asi, y no trabajando directamente la combinacion con Registros dentro de la misma clase, pero bueno, funciono.
  #14 (permalink)  
Antiguo 16/10/2013, 10:21
Avatar de jomaruro
Colaborador
 
Fecha de Ingreso: junio-2002
Ubicación: Naboo
Mensajes: 5.442
Antigüedad: 21 años, 10 meses
Puntos: 361
Respuesta: linkedlist dentro de una lista desplegable no funciona

Hola:

Porque al ejecutar el:

Código Java:
Ver original
  1. LinkedList<Registros> lista = Conexion.getContactos();

El constructor de la clase Conexión te crea un objeto conexión y tu creabas un LinkedList con un objeto Registros.

De ahí que te diera el error:

Cita:
"Incompatible types required Registros"
Es decir, los tipos eran incompatibles, necesitaba un objeto Registros y estaba recibiendo un objeto Conexion.

De ahí que te visualizara los objetos

Cita:
Conexion.Registros@144caa4
Conexion.Registros@5f0e0c
Conexion.Registros@935af2
pero no sus valores.

Saludos.


Etiquetas: desplegable, lista
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 09:36.