RichFaces ExtendedDataTable no Back Bean

0 respostas
leonardobhbr

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


Criado 16 de outubro de 2009
Respostas 0
Participantes 1