Posteado por: Jorge López (jorgaf) | Enero 8, 2008

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.


Respuestas

  1. 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

  3. Kiero saber si ya averiguiastes como llenar el dropdownlist me es urgente si me pasaras el codigo te lo agradecerias ……


Dejar una respuesta

Su respuesta:

Categorías