Bom dia galera eu estou desenvolvendo um modulo para a montagem de gráfico e grid dinâmico. Fiz a implementação utilizando o ExtendedDataTable do RichFaces pela possibilidade que ele da para o usuário de ordenação agrupamento e etc. Só que estou com um problema q como minha consulta e dinamica o que eu jogo para o extendedDataTable é uma
Lista<String[]>
e coloquei o nome do var=data
e para cada coluna ficou#{data[i]}
ele mostra o valor perfeitamente mas quando eu vou clicar para ordenar a coluna ele fica processando eternamente e nao da mensagem de erro nem nada estou usando para o campo sortBy o mesmo codigo que eu valorizo a coluna#{data[i]}
segue os codigo em anexo
package br.com.crm.util;
public enum TipoColuna {Int, VarChar, Char, Decimal, Blob, Date,TimeStamp};
package br.com.crm.util;
import java.io.Serializable;
public class GridDinamicoColumn implements Serializable
{
private static final long serialVersionUID = 1L;
private String nome = null;
private TipoColuna tipo = TipoColuna.VarChar;
private int tamanho = 0;
public String getNome()
{
return nome;
}
public String getDisplayFormat()
{
switch(tipo)
{
case Date : return "dd/MM/yyyy";
case TimeStamp : return "dd/MM/yyyy 'as' hh:mm:ss";
case Decimal : return "###,##0.00";
default : return null;
}
}
public void setNome(String nome)
{
this.nome = nome;
}
public TipoColuna getTipo()
{
return tipo;
}
public void setTipo(String tipo)
{
if(tipo.equalsIgnoreCase("varchar"))
this.tipo = TipoColuna.VarChar;
else
if(tipo.equalsIgnoreCase("char"))
this.tipo = TipoColuna.Char;
else
if(tipo.equalsIgnoreCase("int"))
this.tipo = TipoColuna.Int;
else
if(tipo.equalsIgnoreCase("decimal"))
this.tipo = TipoColuna.Decimal;
else
if(tipo.equalsIgnoreCase("blob"))
this.tipo = TipoColuna.Blob;
else
this.tipo = TipoColuna.VarChar;
}
public int getTamanho()
{
return tamanho;
}
public void setTamanho(int tamanho)
{
this.tamanho = tamanho;
}
public GridDinamicoColumn()
{
super();
}
public GridDinamicoColumn(String nome, String tipo, int tamanho)
{
super();
setNome(nome);
setTipo(tipo);
setTamanho(tamanho);
}
}
package br.com.crm.util;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class GridDinamico implements Serializable
{
private static final long serialVersionUID = 1L;
List<GridDinamicoColumn> colunas = new ArrayList<GridDinamicoColumn>();
List<String[]> registros = new ArrayList<String[]>();
public List<GridDinamicoColumn> getColunas()
{
return colunas;
}
public void setColunas(List<GridDinamicoColumn> colunas)
{
this.colunas = colunas;
}
public List<String[]> getRegistros()
{
return registros;
}
public void setRegistros(List<String[]> registros)
{
this.registros = registros;
}
}
Codigo responsavel pela criação do grid
private void montarDataTable()
{
//Data Scroller
scroll = new HtmlDatascroller();
scroll.setId("scrollDinamico");
scroll.setMaxPages(20);
//
//Table
dataTable = new HtmlExtendedDataTable();
dataTable.setId("gridDinamico");
dataTable.setValue(getGrid().getRegistros());
dataTable.setVar("data");
dataTable.setCellpadding("4");
dataTable.setCellspacing("4");
dataTable.setColumnClasses("cols");
dataTable.setRowClasses("odd-row, even-row");
dataTable.setRows(15);
dataTable.setSortMode("multi");
dataTable.setHeight("200");
dataTable.setFooter(scroll);
//
//EL
FacesContext facesContext = FacesContext.getCurrentInstance();
ELContext elContext = facesContext.getELContext();
ExpressionFactory elFactory = facesContext.getApplication().getExpressionFactory();
//
for(int i = 0; i < getGrid().getColunas().size(); i++)
{
//header
HtmlOutputText outputText = new HtmlOutputText();
outputText.setValue(getGrid().getColunas().get(i).getNome());
//
//content
HtmlOutputText content = new HtmlOutputText();
ValueExpression valueExpression = elFactory.createValueExpression(elContext, "#{data[" + i + "]}", String.class);
content.setValueExpression("value", valueExpression);
//
//column
HtmlColumn column = new HtmlColumn();
column.setHeader(outputText);
column.getChildren().add(content);
column.setSortable(true);
column.setId("col" + i);
column.setValueExpression("sortBy", valueExpression);
column.setValueExpression("filterBy", valueExpression);
column.setFilterEvent("onkeyup");
column.setTitle(getGrid().getColunas().get(i).getNome());
column.setLabel(getGrid().getColunas().get(i).getNome());
//
dataTable.getChildren().add(column);
}
}
Segue a imagem em anexo de como fica a tela
