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!