Criar rich:dataTable Dinamicamente

30 respostas
E

Boa tarde povo.
Vou tentar explicar o que preciso.

Na imagem que eu coloquei em anexo, tenho um listBox de Regionais. Se o usuario selecionar uma regional e clicar em consultar eu tenho que criar um rich:dataTable
se ele selecionar duas regionais duas tabelas e por ai vai.

Como faço isso?

30 Respostas

M

Você pode usar um datagrid que vai listar todas as regionais selecionadas. E dentro do datagrid vc cria o rich:datatable.
Ou seja, você popula um list com todas as regionais selecionadas e exibe esse list com o datagrid e dentro do datagrid vc cria um datatable listando o conteudo q vc quer exibir

E

Não consegui te entender amigo =[
Como vou criar minhas varias tabelas?
Preciso criar uma tabela pra cada regional e nao uma apenas.

M

Então.

Acredito que vc possua uma classe Regional, certo?
Quando vc selecionar as regionais que quer pesquisar e mandar buscar, vc vai ter um list.
vc vai percorrer esse list usando um datagrid. E dentro de cada Regional, vc possui um List do que vc quer exibir na table, certo?
é só criar um datatable dentro do grid com esse list que vc quer.

Bem, se eu entendi a sua dúvida corretamente, seria ± isso…hehehe

E

Sim eu tenho uma classe Regional, quando o usuario seleciona as opçoes no SelectManyListBox eu pego todas os codigos das Regionais q ele selecionou.

Tem como vc me dar um exemplo, por favor? Usando o dataGrid.

M

Ficaria ± assim:

// Aqui vc percorre a lista de regionais selecionadas
<rich:dataGrid value="#{seuBean.regionais}" var="regional" columns="3" elements="9">
       
       // Dentro do seu datagrid, vc percorre a sua lista, referente a regional que vc quer.
       <rich:dataTable value="#{regional.suaLista}"></rich:dataTable>
        
</rich:dataGrid>

E no seu Bean, vc faz a lógica pra quando mandar pesquisar, setar na list as regionais selecionadas

E

Hum começando a entender Marcos.
Só que no meu select vai ser em uma entidade(tabela) de ranking é a tabela de ranking q eu tenho as regionais. Entao se o usuario seleciona duas regionais eu traria os ranking’s das regionais selecionadas.

M

Mas sua entidade Regional não possui um list de ranking não?

E

Deixa eu tentar te explicar melhor pra vê se vc consegue me ajudar.

Na verdade eu vou ter sempre duas listRanking vou fazer duas consultas no Ranking, caso o usuario selecione duas Regionais eu terei quatro tabelas e quatro listRanking, como vou fazer isso com o dataGrid?

L

Crie um panelGroup na sua pagina e faca o binding dele com um bean:

&lt;h:panelGroup binding="#{bean.dataTableGroup}" /&gt;

Ai Nesta classe abstrata crio o dataTabelGroup e adicono as RichDataTable nele

package br.com.xyz.mbean;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;
import java.util.TimeZone;

import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
import javax.faces.component.html.HtmlGraphicImage;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.el.MethodBinding;
import javax.faces.model.DataModel;

import org.ajax4jsf.component.html.HtmlAjaxCommandLink;
import org.richfaces.component.html.HtmlColumn;
import org.richfaces.component.html.HtmlDataTable;
import org.richfaces.component.html.HtmlDatascroller;

import br.com.mbean.qualidade.BasicMbeanInterface;
import br.com.vo.ComponentType;
import br.com.vo.CustomColumnsVO;
import br.com.vo.CustomTableVO;

/**
 * @author Leandro de Godoy
 * @date 24/03/2011
 * 
 */
public abstract class DataTableModel implements BasicMbeanInterface{

    private HtmlPanelGroup dataTableGroup;
    
    public  DataModel model;
    

    /**
     * @author Leandro de Godoy
     */
    public DataTableModel() {
	super();
    }

    /**
     * // Executa a implementacao do metodo na classe implementadora
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @return
     */
    public abstract CustomTableVO getCustomTableVO();

    /**
     * // Executa a implementacao do metodo na classe implementadora
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @return
     */
    public abstract List&lt;CustomColumnsVO&gt; loadCustomColumns();

    /**
     * // Método que cria o objeto HtmlDataTable
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @param customTableVO
     */
    @SuppressWarnings("deprecation")
    private void populateDataTable(CustomTableVO customTableVO) {
	HtmlDataTable dataTable = new HtmlDataTable();
	CustomTableVO customDataTable = getCustomTableVO();
	dataTable = new HtmlDataTable();
	//dataTable.setValueExpression("value", createValueExpression(
	//	customDataTable.getValueExpression(), ListDataModel.class));
	dataTable.setVar(customDataTable.getVar());
	dataTable.setRows(customDataTable.getRows());
	dataTable.setSortMode(customDataTable.getSortMode());
	dataTable.setAlign(customDataTable.getAlign());
	dataTable.setId(customDataTable.getId());

	for (CustomColumnsVO vo : customDataTable.getColunas()) {
	    HtmlColumn column = new HtmlColumn();
	    if (vo.getColumnId() != null) {
		column.setId(vo.getColumnId());
	    }
	    column.setSortable(true);
	    column.setSortBy(vo.getExpression());
	    dataTable.getChildren().add(column);

	    HtmlOutputText outPutText = new HtmlOutputText();
	    outPutText.setValue(vo.getColumnName());
	    column.setHeader(outPutText);

	    if (vo.getComponentType().equals(ComponentType.OUTPUT_TEXT)) {
		HtmlOutputText outputValue = new HtmlOutputText();
		outputValue.setValueExpression("value", createValueExpression(
			vo.getExpression(), vo.getColumnClassType()));
		column.getChildren().add(outputValue);
	    } else if (vo.getComponentType().equals(ComponentType.COMMAND_LINK)) {
		HtmlAjaxCommandLink link = new HtmlAjaxCommandLink();
		link.setActionListener(createActionListenerMethodBinding(vo
			.getActionListenerMethodBinding()));
		link.setOncomplete(vo.getOnComplete());
		link.setDisabled(vo.getDisabled());
		HtmlOutputText textLink = new HtmlOutputText();
		textLink.setValueExpression("value", createValueExpression(vo
			.getExpression(), vo.getColumnClassType()));
		if (vo.getColumnClassType().equals(Date.class)) {
		    DateTimeConverter dateConverter = (DateTimeConverter) FacesContext
			    .getCurrentInstance().getApplication()
			    .createConverter(DateTimeConverter.CONVERTER_ID);
		    dateConverter.setPattern("MM/yyyy");
		    dateConverter.setLocale(new Locale("pt_Br"));
		    textLink.setConverter(dateConverter);
		}
		link.getChildren().add(textLink);
		column.getChildren().add(link);
	    } else if (vo.getComponentType().equals(ComponentType.BUTTON)) {
		HtmlAjaxCommandLink link = new HtmlAjaxCommandLink();
		link.setActionListener(createActionListenerMethodBinding("#{mbPeriodoOperacao.actionEdit}"));
		link.setOncomplete(vo.getOnComplete());
		link.setDisabled(vo.getDisabled());		
		HtmlGraphicImage image = new HtmlGraphicImage();
		image.setUrl("/images/_deletar.jpg");
		image.setStyle("border: none;");
		link.getChildren().add(image);
		link.setReRender(dataTable.getId());
		column.getChildren().add(link);
		
	    }
	}

	HtmlDatascroller scroll = new HtmlDatascroller();
	dataTable.setFooter(scroll);
	
	dataTable.setValue(getModel());
	dataTableGroup = new HtmlPanelGroup();
	dataTableGroup.getChildren().add(dataTable);

	dataTable.processValidators(FacesContext.getCurrentInstance());
	dataTable.processUpdates(FacesContext.getCurrentInstance());

    }

    /**
     * // Método que cria as colunas com os parametro informados
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @param columnName
     * @param expression
     * @param columnType
     * @param componentType
     * @return
     */
    public final CustomColumnsVO createColumn(String columnName,
	    String expression, Class&lt;?&gt; columnType,
	    ComponentType componentType, String actionListenerMethodBinding,
	    Boolean disabled, String onComplete) {
	CustomColumnsVO v = new CustomColumnsVO();
	v.setColumnName(columnName);
	v.setColumnClassType(columnType);
	v.setComponentType(componentType);
	v.setActionListenerMethodBinding(actionListenerMethodBinding);
	v.setDisabled(disabled);
	v.setOnComplete(onComplete);
	

	if (expression != null) {
	    v.setExpression(expression);
	    String expr = expression.replace("#", "").replace("{", "").replace(
		    "}", "");
	    String[] partsName = expr.split("\\.");
	    v.setColumnId(partsName[partsName.length - 1] + "Column");
	}
	return v;
    }

    /**
     * // Método que cria um MethodBinding a partir de uma expression String
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @param actionListenerString
     * @return
     */
    @SuppressWarnings("deprecation")
    private MethodBinding createActionListenerMethodBinding(
	    String actionListenerString) {
	FacesContext facesContext = FacesContext.getCurrentInstance();
	MethodBinding mb = facesContext.getApplication().createMethodBinding(
		actionListenerString,
		new Class[] { javax.faces.event.ActionEvent.class });
	return mb;
    }

    /**
     * // Método que cria um ValueExpression a partir de uma expression em
     * String
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     * @param valueExpression
     * @param valueType
     * @return
     */
    private ValueExpression createValueExpression(String valueExpression,
	    Class&lt;?&gt; valueType) {
	FacesContext facesContext = FacesContext.getCurrentInstance();
	return facesContext.getApplication().getExpressionFactory()
		.createValueExpression(facesContext.getELContext(),
			valueExpression, valueType);
    }

    /**
     * Classe Interna para conversao de valores tipo Date informada em campos de
     * LINK
     * 
     * @author Leandro de Godoy
     * @date 24/03/2011
     * 
     */
    class DateConverter implements Converter {
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String s) {
	    Calendar c = GregorianCalendar.getInstance();
	    String[] parts = s.split("/");
	    String mes = parts[0];
	    String ano = parts[1];
	    c.set(Calendar.MONTH, new Long(mes).intValue());
	    c.set(Calendar.YEAR, new Long(ano).intValue());
	    c.set(Calendar.DAY_OF_MONTH, c
		    .getActualMinimum(Calendar.DAY_OF_MONTH));
	    return c.getTime();
	}

	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object o) {
	    DateFormat sdf = new SimpleDateFormat("MM/yyyy");
	    sdf.setTimeZone(TimeZone.getTimeZone("America/Sao_Paulo"));
	    Date data = (Date) o;

	    return sdf.format(data);
	}

    }

    public HtmlPanelGroup getDataTableGroup() {
	if (dataTableGroup == null) {
	    populateDataTable(new CustomTableVO()); // Populate datatable.
	}
	return dataTableGroup;
    }

    public void setDataTableGroup(HtmlPanelGroup dataTableGroup) {
	this.dataTableGroup = dataTableGroup;
    }

    /**
     * // Método que forca a criacao od modelo de dados na 
     * classe implementadora  
     *
     * @author Leandro de Godoy
     * @date 24/03/2011
     *
     * @return
     */
    public abstract DataModel getModel() ;

    public abstract void setModel(DataModel model) ;
    
    
    

}


public enum ComponentType {

    COMMAND_LINK, OUTPUT_TEXT, BUTTON;

}





/**
 * @author Leandro de Godoy
 * @date 24/03/2011
 *
 */
public class CustomColumnsVO {

    /**
     * Expressao de valore da coluna
     */
    private String expression;

    /**
     * Nome da Coluna
     */
    private String columnName;

    /**
     * ID da coluna
     */
    private String columnId;

    /**
     * Classe do Objeto na Coluna Caso Date , sera utilizado o converter de Data
     */
    private Class&lt;?&gt; columnClassType;

    /**
     * Tipo do component: Button Link OutPutText
     */
    private ComponentType componentType;

    /**
     * em caso de Botao excluir e editar, expressao de validação de
     * habilita/desabilita
     */
    private Boolean disabled = false;

    /**
     * MethodBinding do componente
     */
    private String actionListenerMethodBinding;

    /**
     * javaScript a ser executado no fim da requisicao ajax
     */
    private String onComplete;

    /**
     * @author Leandro de Godoy
     */
    public CustomColumnsVO() {

    }



/**
 * @author Leandro de Godoy
 * @date 24/03/2011
 *
 */
public class CustomTableVO {

	/**
	 * ID da table
	 */
	private String id = "table";

	/**
	 * numero de Linhas da Tabela
	 */
	private int rows = 5;

	/**
	 * Expressao Binding do value da tabela
	 */
	private String valueExpression;

	/**
	 * nome da var utilizadad pela tabela
	 */
	private String var = "item";

	/**
	 * alingn da tabela
	 */
	private String align = "center";

	/**
	 * Tipo de Sort da tabela
	 */
	private String sortMode = "single";

	/**
	 * Lista de colunas da tabela
	 */
	private List&lt;CustomColumnsVO&gt; colunas;

Com isso vc consegue criar um panelGroup e adicionar as tabelas a ele de forma programatica.

E

Estou tentando entender isso ai que vc postou e fazer aqui.

Eu criei essa classe abstrata
public abstract class DataTableModel {

	private HtmlPanelGroup dataTableGroup; 
	public  DataModel model;  
	
	 public HtmlPanelGroup getDataTableGroup() {   
		 if (dataTableGroup == null) {   
		     populateDataTable(new TableRankingTotalVendas()); // Populate datatable.   
		 }   
		    return dataTableGroup;   
	 }   
		  
	public void setDataTableGroup(HtmlPanelGroup dataTableGroup) {   
	   this.dataTableGroup = dataTableGroup;   
	}   

	private void populateDataTable(TableRankingTotalVendas customDataTable){   
		HtmlDataTable dataTable = new HtmlDataTable();   		        
		dataTable = new HtmlDataTable();   		         
		dataTable.setVar(customDataTable.getVar());   
		dataTable.setRows(customDataTable.getRows());  		       
		dataTable.setId(customDataTable.getId());   
		     
		for(ColumnsTableRankingTotalVendas colunaTableTotVenda : customDataTable.getColunas()) {   
		    HtmlColumn column = new HtmlColumn();   
		    if(colunaTableTotVenda.getColumnId() != null) {   
		      	column.setId(colunaTableTotVenda.getColumnId());   
		    }   
		         
		    dataTable.getChildren().add(column);   
		      
		    HtmlOutputText outPutText = new HtmlOutputText();   
		    outPutText.setValue(colunaTableTotVenda.getColumnName());   
		    column.setHeader(outPutText);  		           
		               
	    }   
	} 	      
		      
}

Como faço pra popular as colunas? De acordo com minha lista de objetos? O que seria no rich:dataTable o value="#{bean.meuListDataModelComMinhaLista}"
Outra coisa nao entendi pra que serve esse expression

L

Bom agora que vc tem esta classe abstrata o seu bean deve extender ela e implementar os metodos abstratos os dados da tabela devem estar em um DataModel, o valueExpression e a expressao usada nos campos values do dataTabel tipo se vc criasse a tabela na mao teria que colocar no value dela algo como isso value="#{bean.lista}", vc vai ter qeu customizar um pouco este codigo que te passei pra adaptar a sua necessidade , poste + codigo do que vc esta tentando fazer ai pra que eu possa te ajudar.

E

Eu to meio perdido eu vi seu dataModel declarado no inicio da classe abstrata mas n sei onde vou criar o meu. No meu primeiro post eu coloquei a imagem das tabelas q eu tenho que criar, sao tabelas simples, até agora eu so criei isso que postei pq estou perdido.

L

entao na classe abstrata vc tem os metodos

public abstract DataModel getModel() ;  
  
    public abstract void setModel(DataModel model) ;

Entao qdo seu bean extender esta classe vc vai ter que implementar estes metodos
neste caso o getModel deve retornar um new ListDataModel(suaListaDeObjetosAqui);

E

Ok leo fiz isso, no meu bean eu preciso criar o que agora? Um dataTableGroup?

E

Esta assim o DataTableModel

package br.com.vivo.utils;

import javax.el.ValueExpression;
import javax.faces.component.html.HtmlColumn;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.model.DataModel;

import org.hibernate.type.ComponentType;


public abstract class DataTableModel {

	private HtmlPanelGroup dataTableGroup; 
	public  DataModel model;  
	
	 public HtmlPanelGroup getDataTableGroup() {   
		 if (dataTableGroup == null) {   
		     populateDataTable(new TableRankingTotalVendas()); // Populate datatable.   
		 }   
		    return dataTableGroup;   
	 }   
		  
	public void setDataTableGroup(HtmlPanelGroup dataTableGroup) {   
	   this.dataTableGroup = dataTableGroup;   
	}   

	private void populateDataTable(TableRankingTotalVendas customDataTable){   
		HtmlDataTable dataTable = new HtmlDataTable();   		        
		dataTable = new HtmlDataTable();   		         
		dataTable.setVar(customDataTable.getVar());   
		dataTable.setRows(customDataTable.getRows());  		       
		dataTable.setId(customDataTable.getId());   
		     
		for(ColumnsTableRanking coluna : customDataTable.getColunas()) {   
		    HtmlColumn column = new HtmlColumn();   
		    if(coluna.getColumnId() != null) {   
		      	column.setId(coluna.getColumnId());   
		    }   
		         
		    dataTable.getChildren().add(column);   
		      
		    HtmlOutputText outPutText = new HtmlOutputText();   
		    outPutText.setValue(coluna.getColumnName());   
		    column.setHeader(outPutText);  		           
		               
	    }   
	}
	
	
	 /**  
     * // Método que cria as colunas com os parametro informados  
     *      
     * @param columnName  
     * @param expression  
     * @param columnType  
     * @param componentType  
     * @return  
     */   
    public final ColumnsTableRanking createColumn(String columnName,   
        String expression, Class<?> columnType,   
        ComponentType componentType, String actionListenerMethodBinding,   
        Boolean disabled, String onComplete) {   
    	ColumnsTableRanking v = new ColumnsTableRanking();   
    v.setColumnName(columnName);   
    v.setColumnClassType(columnType);   
    v.setComponentType(componentType);   
    v.setActionListenerMethodBinding(actionListenerMethodBinding);   
    v.setDisabled(disabled);   
    v.setOnComplete(onComplete);   
       
  
    if (expression != null) {   
        v.setExpression(expression);   
        String expr = expression.replace("#", "").replace("{", "").replace(   
            "}", "");   
        String[] partsName = expr.split("\\.");   
        v.setColumnId(partsName[partsName.length - 1] + "Column");   
    }   
    return v;   
    }   

	
	/**  
     * // Método que cria um ValueExpression a partir de uma expression em  
     * String   
     * @param valueExpression  
     * @param valueType  
     * @return  
     */   
    private ValueExpression createValueExpression(String valueExpression,   
        Class<?> valueType) {   
    FacesContext facesContext = FacesContext.getCurrentInstance();   
    return facesContext.getApplication().getExpressionFactory()   
        .createValueExpression(facesContext.getELContext(),   
            valueExpression, valueType);   
    }
    
    /**  
     * // Método que cria um MethodBinding a partir de uma expression String     
     * @param actionListenerString  
     * @return  
     */   
    @SuppressWarnings("deprecation")   
    private MethodBinding createActionListenerMethodBinding(   
        String actionListenerString) {   
    FacesContext facesContext = FacesContext.getCurrentInstance();   
    MethodBinding mb = facesContext.getApplication().createMethodBinding(   
        actionListenerString,   
        new Class[] { javax.faces.event.ActionEvent.class });   
    return mb;   
    }   


	
	/**  
     * // Método que forca a criacao od modelo de dados na  
     * classe implementadora    
     *  
     * @author Leandro de Godoy  
     * @date 24/03/2011  
     *  
     * @return  
     */   
    public abstract DataModel getModel() ;   
  
    public abstract void setModel(DataModel model) ;   

}

Tenho que fazer mais coisas pra utilizar? como faço pra utilizar agora?

L

bom se vc ja criou o ManagedBean e extendeu a classe Abstrata agora na sua pagina vc coloca <h:panelGroup binding="#{bean.dataTableGroup}" />
com isso ele vai criar o dataTableGroup que no seu bean ta jogando a tabela dentro dele.

E

Tenho que criar um HtmlPanelGroup dataTableGroup no meu bean entao?

Eu nao to entendendo como vou ir criando as tabelas no meu bean.

E

Tem como me mostrar como vc faz no seu bean?

L

Velho agora vc deve criar o seu ManagedBean e registra- lo no faces config, apos feito isso vc deve fazer o seu managedBean extender a classe Abstrata e deve implementar os metodos abstratos da classe.
poste como ficou seu managedBean.

E
Ja tenho meu managedBean, ele ja esta sendo usado, so falta criar os RichDataTables
public class RankingBB extends DataTableModel{

public HtmlPanelGroup dataTableGroup;

	/*
	 * Combo Interface
	 */
	private Integer valueComboInterface;
	private List<Interface> listInterface;
	private List<SelectItem> listSelectItemInterface;
	
	/*
	 * SelectListMany Regional
	 */
	private List<Regional> listRegional;
	private List<SelectItem> listSelectItemRegional;
	private List<Integer> listRegionaisSelecionadas;
	
	private final Integer AGRUPAR_REGIONAIS = 1;
    private final Integer QUEBRAR_REGIONAIS = 2;
    private boolean renderedColunaRegional = true;
    private Integer valueSelectOneRegional;
    private RankingDTO rankingDTO;
	
	/*
	 * Combo Ano
	 */
	private Integer valueComboAno;
	private List<String> listAno;
	private List<SelectItem> listSelectItemAno;
	private Date dataAtual = new Date();
	private Integer codAno = 1;
	
	/*
	 * Combo Mes
	 */
	private Integer valueComboMes;
	private List<String> listMes;
	private List<SelectItem> listSelectItemMes;

	
	@PostConstruct
	public void init(){
		listAno = anosConsulta(dataAtual);
		preencheCombos();
		listRegional = preencheSelectManyListRegional(getListSelectItemRegional(), getListRegional());
	}

@Override
	public DataModel getModel() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setModel(DataModel model) {
		// TODO Auto-generated method stub
		
	}
}
L

ficaria ± assim:

//Um ejb aki tem que fazer lookup é claro.
	private TesteEjb testeEjb;
	
	
	@Override
	public CustomTableVO getCustomTableVO() {
		CustomTableVO tb = new CustomTableVO();
		tb.setAlign("center");
		tb.setColunas(loadCustomColumns());
		tb.setRows(10);
		tb.setSortMode("single");
		tb.setValueExpression("#{mbean.model}");
		tb.setVar("item");
		
		return null;
	}

	@Override
	public DataModel getModel() {
		
		return new ListDataModel(testeEjb.listarDados());
	}

	@Override
	public List&lt;CustomColumnsVO&gt; loadCustomColumns() {
	CustomColumnsVO colunaId = createColumn("ID", "#{item.id}",Long.class , ComponentType.OUTPUT_TEXT, "", false, "");
	CustomColumnsVO colunaNome = createColumn("Nome", "#{item.nome}",String.class , ComponentType.OUTPUT_TEXT, "", false, "");
	
	List&lt;CustomColumnsVO&gt; colunas = new ArrayList&lt;CustomColumnsVO&gt;();
	colunas.add(colunaId);
	colunas.add(colunaNome);
		return colunas;
	}

vou ver se acho um exemplo completo aki, faz tempao que fiz isso e nao to lembrando em qual projeto foi.

L

achei é assim que ta aki:

List&lt;CustomColumnsVO&gt; customTable = new ArrayList&lt;CustomColumnsVO&gt;();

    /*
     * createColumn(String columnName, String expression, Class&lt;?&gt; columnType,
     * ComponentType componentType, String actionListenerMethodBinding, Boolean
     * disabled, String onComplete)
     */

  
    public List&lt;CustomColumnsVO&gt; loadCustomColumns() {
	boolean disabled = !getMBUnidadeOperacional().getIsEditing();
	customTable.add(createColumn("Del.", null, HtmlCommandButton.class,
		ComponentType.BUTTON, "#{mbPeriodoOperacao.actionDelete}",
		disabled, "Richfaces.showModalPanel('periodoDeletePanel')"));

	customTable.add(createColumn("Ref. Inicial",
		"#{item.vigencia.dataHoraInicio}", Date.class,
		ComponentType.COMMAND_LINK,
		"#{mBPeriodoOperacao.actionEdit}", disabled,
		"Richfaces.showModalPanel('novoPeriodoPanel')"));
	customTable.add(createColumn("Ref. Final",
		"#{item.vigencia.dataHoraFim}", Date.class,
		ComponentType.OUTPUT_TEXT, "", false, ""));
	customTable.add(createColumn("Freqüência de medição",
		"#{item.tipoFrequencia}", Enum.class,
		ComponentType.OUTPUT_TEXT, "", false, ""));	
	

	return customTable;
    }

    public CustomTableVO getCustomTableVO() {
	CustomTableVO customDataTable = new CustomTableVO();
	customDataTable.setAlign("center");
	customDataTable.setColunas(loadCustomColumns());
	customDataTable.setRows(5);
	customDataTable.setSortMode("single");
	customDataTable.setValueExpression("#{mBPeriodoOperacao.model}");
	customDataTable.setVar("item");
	return customDataTable;
    }
E

tem como me mostrar agora seu getModel,setModel? E o binding como vc criou o panelGroup? Sei que to encomodando mas e pq nunca fiz isso e to perdido =[

minhas implementações estao assim:
@Override
	public DataModel getModel() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void setModel(DataModel model) {
		// TODO Auto-generated method stub
		
	}

	public TableRankingTotalVendas getTable() {
		TableRankingTotalVendas tb = new TableRankingTotalVendas();   
	    tb.setColunas(loadCustomColumns());   
	    tb.setRows(10);   	   
	    tb.setValueExpression("#{rankingBB.model}");   
	    tb.setVar("item");		
		return tb;
	}

	
	public List<ColumnsTableRanking> loadCustomColumns() {
		ColumnsTableRanking colunaId = createColumn("ID", "#{item.id}",Long.class , ComponentType.OUTPUT_TEXT, "", false, "");   
		ColumnsTableRanking colunaNome = createColumn("Nome", "#{item.nome}",String.class , ComponentType.OUTPUT_TEXT, "", false, "");   
		  
		List<ColumnsTableRanking> colunas = new ArrayList<ColumnsTableRanking>();   
		colunas.add(colunaId);   
		colunas.add(colunaNome);   
		return colunas;  
	}
L
@Override
	public DataModel getModel() {
		//testeEjb um ejb que faz um select  no banco e retorna todos os objetos Usuarios por exemplo
		return new ListDataModel(testeEjb.listarUsuarios());
	}

	@Override
	public void setModel(DataModel model) {
		this.model = model;
		
	}

e na sua pagina vc coloca <h:panelGroup binding="#{bean.dataTableGroup}" />

E

bean.dataTableGroup vc criou um public HtmlPanelGroup dataTableGroup no seu bean? So isso? Vou testar aqui

L

è so isso msm, teste ai e poste o resultado.

E

Vou testar amanha no meu serviço, so uma pergunta, nao preciso setar nada para o dataTableGroup? Pq no bean nao estou fazendo nda com ele.
E quem vai chamar meus metodo getTable()?

E

Fazendo os testes aqui nao ta dando erro, só que a table nao aparece na pagina, sera pq?

Criei um método so pra teste:

public void createDataTable(){
		
		HtmlColumn colum = new HtmlColumn();
		HtmlOutputText header = new HtmlOutputText();
		header.setValue("Produto");
		colum.setHeader(header);
		
		HtmlColumn columDois = new HtmlColumn();
		HtmlOutputText headerDois = new HtmlOutputText();
		header.setValue("Regional");
		colum.setHeader(headerDois);
		
		HtmlOutputText textUm = new HtmlOutputText();
		textUm.setValueExpression("value", createValueExpression("#{item.produto.dsProduto}", String.class));
		textUm.setValue("#{item.produto.dsProduto}");
		
		HtmlOutputText textDois = new HtmlOutputText();
		textUm.setValueExpression("value", createValueExpression("#{item.regional.dsRegional}", String.class));
		textUm.setValue("#{item.regional.dsRegional}");
		
		colum.getChildren().add(textUm);
		columDois.getChildren().add(textDois);
		
		getDataTable().getChildren().add(colum);
		getDataTable().getChildren().add(columDois);
		
		List<RankingProduto> listRanking = getRankingService().consultaTodos();		
		
		listDataModel = new ListDataModel(listRanking);
		
		getDataTable().setVar("item");
		
		getDataTable().setValueExpression("value", createValueExpression("#{rankingBB.listDataModel}", ListDataModel.class));
		
		getDataTableGroup().getChildren().add(getDataTable());
		
	}
Na pagina:
<h:panelGroup binding="#{rankingBB.dataTableGroup}">
L

Não aparece? Nem os cabecalhos da tabela?

E

Nao aparece nada =[
Eu posso usar um ListDataModel na expression?

Criado 6 de março de 2012
Ultima resposta 9 de mar. de 2012
Respostas 30
Participantes 3