Problem with ScrollableDataTable example
svenhassel Dec 17, 2008 5:06 AMCould 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!