Binding un ArrayList a un DropDownList en JSF


El día de ayer se me hizo la siguiente consulta ¿cómo puedo utilizar un ArrayList como fuente de datos para un DropDownList en JSF?

Al parecer la respuesta no debería ser tan complicada, especialmente si la mayoría de aplicaciones JSF lo he realizado con JDeveloper y ADF, pero el proyecto se está desarrollando en NetBeans, es decir JSF puro.

Les explico un poco la estructura del programa. Tengo un POJO llamado Ubicación (atributos: código, nombre, codigo de país, código postal). Muestro parte del código, hacen falta los métodos set y get para cada atributo.

public class Ubicacion{

private int codigo;
private String nombre;
private String codigoPais;
private String codigoPostal; public Ubicacion(int codigo, String nombre, String codigoPais, String codigoPostal) {

this.codigo = codigo;
this.nombre = nombre;
this.codigoPais = codigoPais;
this.codigoPostal = codigoPostal;

}

….

Dentro del bean de session que crea NetBeans, he creado una propiedad – un ArrayList que contiene elementos de tipo Ubicación y que se denomina ubicaciones, cree los métodos get y set para dicha propiedad e inicialicé con algunos valores el ArrayList.

public class SessionBean1 extends AbstractSessionBean {

private ArrayList<Ubicacion> ubicaciones = new ArrayList<Ubicacion>();

Finalmente la parte visual en donde ubico un dropdownlist o combo, hago el binding especificando el atributo ubicaciones que se encuentra dentro del bean de sesión.

<webuijsf:form binding=”#{Page1.form1}” id=”form1″>

<webuijsf:dropDown binding=”#{Page1.dropDown1}” id=”dropDown1″ items=”#{SessionBean1.ubicaciones}” />

</webuijsf:form>

Hasta ahí, ejecuté la aplicación y lo que obtuve fue una página en blanco ¿que pasó?En ningún momento especifiqué que atributo debería ser el valor del dropdown ni tampoco lo que muestra al usuario.

Investigando llegué a ver que existe una clase Option (com.sun.webui.jsf.model.Option) de la cual deben heredar todas las clases que serán mostradas como elementos dentro de un dropdownlist. Es necesario configurar 2 atributos, value y label. Value indica el valor interno y label es lo que el usuario verá. El código de la clase Ubicación se vería así:

public class Ubicacion extends Option{

private int codigo;
private String nombre;
private String codigoPais;
private String codigoPostal;

public Ubicacion(int codigo, String nombre, String codigoPais, String codigoPostal) {

this.codigo = codigo;
super.setValue(codigo);
this.nombre = nombre;
super.setLabel(nombre);
this.codigoPais = codigoPais;
this.codigoPostal = codigoPostal;

}

Los métodos setValue y setLabel son heredados.

Bueno esto es nuevo para mi y espero que les sirva.

Powered by ScribeFire.

10 comentarios en “Binding un ArrayList a un DropDownList en JSF

  1. Guido Casco dijo:

    Estuve desarrollando el ejemplo que mostraste, lo que no entiendo es en que momento se carga la lista, si por favor me podes pasar algun codigo para poder visualizar, te voy agradecer demasiado.

    Atentamente.

    Guido Casco

  2. Hola Guido,

    Por problemas en mi portátil no tengo a la mano todo el código, pero estoy casi seguro que en el bean de sesión se crean las clases que se almacenan en el ArrayList.

    Trataré de buscar el código en los respaldos, pero eso me llevará algún tiempo, espero tú paciencia.

    Saludos

    • Freddy dijo:

      Lo que yo veo es que la unica forma que para poder enlazarlo a una base de datos es con un resultSet.

      Por ejemplo:

      1. Hacemos nuestra consulta.
      2. La ejecutamos y la metemos en un resultSet.
      3. y por ejemplo tenemos nuestra variable que es de tipo arrelo.
      que le podriamos decir:

      variableArreglo.add(ResultSet.getInt(“Codigo”), ResultSet.getString(“Nombre”));

      y listo luego hacemos lo del SessionBean.

      Pues yo lo intente pero me carga vacio. Alguna sugerencia????

  3. Alexis dijo:

    Hola.
    Quisiera un ejemplo un poco detallado sobre la utilizacion del ArrayList, que imcluya condicional.
    Ejem: ingresar los datos y 3 puntajes dun concursante, ver quien gano y si hay empate ingresar solo puntajes y mostrar quuien es el ganador del desempate.

    Gracias..!!

  4. rjpunisher dijo:

    jajaja me da una risa jajajaja
    bueno les voy ha hacer el paso mas facil,
    lo que tienen que hacer es lo siguiente primero un List de tipo option

    ListitemsUbicacion=new ArrayList();

    itemsUbicacion.add(new(“valor”,”label”);

    asi agregas los que queras.

    si tenemos una lista con una serie de objetos de base de datos o lo que quieran, pues nada solo la recorremos ejemplo.

    for(Ubicacion ubicacion:ListaBaseDAtos){

    itemsUbicacion.add(ubicacion.codigo,ubicacion.nombre);

    }fin del for y listo sale jajajajajaj

  5. Fernando dijo:

    hola espero puedas leer este post y porfavor me puedas alcanzar tu codigo enserio es de suma urgencia porq en el trabajo me estan pidiendo eso te lo suplico ojala puedas enviarme tu codigo a mi correo porfavor “fernando_upn@hotmail.com”

  6. Gracias por el aporte me estoy iniciando en esto de las aplicaciones con JSF, solo una cosa como hago para capturar en un objeto el item seleccionado en el dropdownlist ????

  7. Geovanny dijo:

    Hola que tal, disculpa me pueden ayudar tengo un ListBox con seleccion multiple (uso VisualWeb JSF en NetBeans) enlazado desde una DB, lo que necesito saber cual el valor del value de cada elemento seleccionado.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s