1 Reply Latest reply on Dec 17, 2008 7:30 AM by JLuis -

    Problem with ScrollableDataTable example

    JLuis - Newbie

      Could somebody help me running this ScrollableDataTable richfaces JSF example?

      When I launch the 'ejemploTablaClientes', I get this error message:
      java.lang.IllegalArgumentException: Cannot convert [] of type class java.util.ArrayList to interface org.richfaces.model.selection.Selection

      These are the pieces of code:

      ejemploTablaClientes.xhtml

      <?xml version="1.0" encoding="ISO-8859-15"?>
      <ui:composition xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
      
       <h:form>
       <rich:spacer height="30" ></rich:spacer>
      
       <rich:scrollableDataTable rowKeyVar="rkv" frozenColCount="1" height="400px"
       width="700px" id="clientes" rows="40" columnClasses="col"
       value="#{tablaClientesBean.listaClientes}" var="cliente" sortMode="single"
       selection="#{tablaClientesBean.listaClientesSeleccionados}">
       <rich:column id="nombre">
       <f:facet name="header"><h:outputText styleClass="headerText" value="Nombre" ></h:outputText></f:facet>
       <h:outputText value="#{cliente.nombre}" ></h:outputText>
       </rich:column>
       <rich:column id="apellido1">
       <f:facet name="header"><h:outputText styleClass="headerText" value="1er Apellido" ></h:outputText></f:facet>
       <h:outputText value="#{cliente.apellido1}" ></h:outputText>
       </rich:column>
       <rich:column id="apellido2">
       <f:facet name="header"><h:outputText styleClass="headerText" value="2º Apellido" ></h:outputText></f:facet>
       <h:outputText value="#{cliente.apellido2}" ></h:outputText>
       </rich:column>
       <rich:column id="codigo" width="200px">
       <f:facet name="header"><h:outputText styleClass="headerText" value="Código" ></h:outputText></f:facet>
       <h:outputText value="#{cliente.codigo}" ></h:outputText>
       </rich:column>
       </rich:scrollableDataTable>
      
       <rich:spacer height="20px"></rich:spacer>
      
       <a4j:commandButton value="Mostrar seleccionados" reRender="table"
       action="#{tablaClientesBean.seleccionar}"
       oncomplete="javascript:Richfaces.showModalPanel('panel');"></a4j:commandButton>
       </h:form>
       <rich:modalPanel id="panel" autosized="true">
       <f:facet name="header">
       <h:outputText value="Clientes seleccionados"></h:outputText>
       </f:facet>
       <f:facet name="controls">
       <span style="cursor:pointer" onclick="javascript:Richfaces.hideModalPanel('panel')">X</span>
       </f:facet>
       <rich:dataTable value="#{tablaClientesBean.listaClientesSeleccionados}" var="sel" id="table">
       <rich:column id="nombre">
       <f:facet name="header"><h:outputText value="Nombre" ></h:outputText></f:facet>
       <h:outputText value="#{sel.nombre}" ></h:outputText>
       </rich:column>
       <rich:column id="apellido1">
       <f:facet name="header"><h:outputText value="1er apellido" ></h:outputText></f:facet>
       <h:outputText value="#{sel.apellido1}" ></h:outputText>
       </rich:column>
       <rich:column id="apellido2">
       <f:facet name="header"><h:outputText value="2º apellido" ></h:outputText></f:facet>
       <h:outputText value="#{sel.apellido2}" ></h:outputText>
       </rich:column>
       <rich:column id="codigo">
       <f:facet name="header"><h:outputText value="Código" ></h:outputText></f:facet>
       <h:outputText value="#{sel.codigo}" ></h:outputText>
       </rich:column>
       </rich:dataTable>
       </rich:modalPanel>
      </ui:composition>
      


      Cliente.java
      package prueba;
      
      import java.io.Serializable;
      
      public class Cliente implements Serializable{
      
       public String nombre;
       public String apellido1;
       public String apellido2;
       public int codigo;
      
       public Cliente(String nombre, String apellido1, String apellido2, int codigo) {
       this.nombre = nombre;
       this.apellido1 = apellido1;
       this.apellido2 = apellido2;
       this.codigo = codigo;
       }
      
       public String getNombre() {
       return nombre;
       }
      
       public void setNombre(String nombre) {
       this.nombre = nombre;
       }
      
       public String getApellido1() {
       return apellido1;
       }
      
       public void setApellido1(String apellido1) {
       this.apellido1 = apellido1;
       }
      
       public String getApellido2() {
       return apellido2;
       }
      
       public void setApellido2(String apellido2) {
       this.apellido2 = apellido2;
       }
      
       public int getCodigo() {
       return codigo;
       }
      
       public void setCodigo(int codigo) {
       this.codigo = codigo;
       }
      
      }
      


      TablaClientesBean.java
      package prueba;
      
      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.Iterator;
      
      import org.richfaces.model.ScrollableTableDataModel.SimpleRowKey;
      import org.richfaces.model.selection.SimpleSelection;
      
      public class TablaClientesBean {
      
       private ArrayList<Cliente> listaClientes = null;
       private ArrayList<Cliente> listaClientesSeleccionados = new ArrayList<Cliente>();
       private SimpleSelection seleccionActual = new SimpleSelection();
      
       public ArrayList<Cliente> getListaClientes() {
       synchronized (this) {
       if (listaClientes == null) {
       Cliente[] sublistaArray = new Cliente[8];
      
       Cliente cliente;
       cliente = new Cliente("Jose Luis", "Toro", "GarcÃÂÂa", 28736);
       sublistaArray[0] = cliente;
       cliente = new Cliente("Alfredo", "Pérez", "Ayuso", 54376);
       sublistaArray[1] = cliente;
       cliente = new Cliente("Luis", "GarcÃÂÂa", "Escalada", 12341);
       sublistaArray[2] = cliente;
       cliente = new Cliente("Pedro", "ô┐Żlamo", "Huertas", 87432);
       sublistaArray[3] = cliente;
       cliente = new Cliente("Isabel", "Dominguez", "Lancha", 33211);
       sublistaArray[4] = cliente;
       cliente = new Cliente("Ana", "Hurtado", "Mendoza", 87990);
       sublistaArray[5] = cliente;
       cliente = new Cliente("Francisco", "Vieja", "Roncesvalles", 11213);
       sublistaArray[6] = cliente;
       cliente = new Cliente("Esperanza", "Ortiz", "Quiros", 44567);
       sublistaArray[7] = cliente;
      
       ArrayList<Cliente> sublista = new ArrayList<Cliente>(Arrays.asList(sublistaArray));
      
       listaClientes = new ArrayList<Cliente>();
       listaClientes.addAll(sublista);
       }
       }
      
       return listaClientes;
       }
      
       public SimpleSelection getSeleccionActual() {
       return seleccionActual;
       }
      
       public void setSeleccionActual(SimpleSelection seleccionActual) {
       this.seleccionActual = seleccionActual;
       }
      
       public ArrayList<Cliente> getListaClientesSeleccionados() {
       return listaClientesSeleccionados;
       }
      
       public void setListaClientesSeleccionados(ArrayList<Cliente> listaClientesSeleccionados) {
       this.listaClientesSeleccionados = listaClientesSeleccionados;
       }
      
       public String seleccionar() {
       listaClientesSeleccionados.clear();
      
       Iterator<Object> iterator = seleccionActual.getKeys();
       while (iterator.hasNext()){
       SimpleRowKey key = (SimpleRowKey)iterator.next();
       listaClientesSeleccionados.add(listaClientes.get(key.intValue()));
       }
      
       return null;
       }
      
      }
      


      Remember to declare it in the faces-config.xml:
       <managed-bean>
       <managed-bean-name>tablaClientesBean</managed-bean-name>
       <managed-bean-class>prueba.TablaClientesBean</managed-bean-class>
       <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>
      


      I know the problem is in the method getListaClientes, but I'm very ofuscated...

      Thanks!