entao, o meu maior problema é o seguite, ai nessa classe, CriaGrid, eu cria uma grid dinamica, gera as colunas e campos tudo perfeitinho
o meu problema é o seguinte:
eu vou chamar isso atravez de um xhtml, ou seja, nao existe como passar parametros ou nada disso, estou fazendo algo em JSF.
passo assim agora:
h:panelGrid border="1" binding="#{criaGrid.dynamicDataTableGroup}" />
que chama o meu MenagedBean CriaGrid
que está com o seu parametro no caso, tipoTelas voltando a uma tabela do meu banco de dados, que tem suas configuraçoes, campos, nomes, tamanhos e tudo mais nessa classe.
quando eu chamar o meu outro xhtml, eu vou precisar chamar com outra tabela do meu banco de dados, por isso que eu queria extender
seria mais ou menos isso:
package Telas;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.el.ValueExpression;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
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 Base.Conexao;
@ManagedBean
@SessionScoped
public class CriaGrid {
//private TelaLinha tipoTelas;
// Init
// --------------------------------------------------------------------------------------
private static List<List<String>> dynamicList; // Simulate fake DB.
private static String[] dynamicHeaders; // Optional.
private HtmlPanelGroup dynamicDataTableGroup; // Placeholder.
// Actions
// -----------------------------------------------------------------------------------
private void loadDynamicList() throws SQLException {
TelaLinha tipoTelas = new TelaLinha();
Conexao consulta = new Conexao();
consulta.Conecta();
//tipoTelas = new TelaLinha();
System.out.println(tipoTelas.Coluna().size());
// Set headers (optional).
String[] colunas = null;
colunas = tipoTelas.Titulo();
dynamicHeaders = colunas;
// Set rows. This is a stub example, just do your dynamic thing.
ArrayList<String> registros = null;
registros = tipoTelas.Coluna();
ResultSet rsGrid = consulta.Consulta(tipoTelas.Sql());
dynamicList = new ArrayList<List<String>>();
System.out.println(tipoTelas.Coluna().size());
while (rsGrid.next()) {
ArrayList<String> campos = new ArrayList<String>();
for (int i = 0; i < tipoTelas.Coluna().size(); i++) {
campos.add(rsGrid.getString(registros.get(i)));
}
campos.add("alterar");
campos.add("excluir");
dynamicList.add(campos);
}
}
private void populateDynamicDataTable() {
// Create <h:dataTable value="#{myBean.dynamicList}" var="dynamicItem">.
HtmlDataTable dynamicDataTable = new HtmlDataTable();
ValueExpression ve = FacesContext
.getCurrentInstance()
.getApplication()
.getExpressionFactory()
.createValueExpression(
FacesContext.getCurrentInstance().getELContext(),
"#{criaGrid.dynamicList}", List.class);
dynamicDataTable.setValueExpression("value", ve);
dynamicDataTable.setVar("dynamicItem");
// Iterate over columns.
for (int i = 0; i < dynamicList.get(0).size(); i++) {
// Create <h:column>.
HtmlColumn column = new HtmlColumn();
dynamicDataTable.getChildren().add(column);
// Create <h:outputText value="dynamicHeaders[i]"> for <f:facet
// name="header"> of column.
HtmlOutputText header = new HtmlOutputText();
header.setValue(dynamicHeaders[i]);
column.setHeader(header);
// Create <h:outputText value="#{dynamicItem[" + i + "]}"> for the
// body of column.
HtmlOutputText output = new HtmlOutputText();
ValueExpression ve2 = FacesContext
.getCurrentInstance()
.getApplication()
.getExpressionFactory()
.createValueExpression(
FacesContext.getCurrentInstance().getELContext(),
"#{dynamicItem[" + i + "]}", String.class);
output.setValueExpression("value", ve2);
column.getChildren().add(output);
}
// Add the datatable to <h:panelGroup
// binding="#{myBean.dynamicDataTableGroup}">.
dynamicDataTableGroup = new HtmlPanelGroup();
dynamicDataTableGroup.getChildren().add(dynamicDataTable);
}
// Getters
// -----------------------------------------------------------------------------------
public HtmlPanelGroup getDynamicDataTableGroup() throws SQLException {
// This will be called once in the first RESTORE VIEW phase.
if (dynamicDataTableGroup == null) {
loadDynamicList(); // Preload dynamic list.
populateDynamicDataTable(); // Populate editable datatable.
}
return dynamicDataTableGroup;
}
public List<List<String>> getDynamicList() {
return dynamicList;
}
// Setters
// -----------------------------------------------------------------------------------
public void setDynamicDataTableGroup(HtmlPanelGroup dynamicDataTableGroup) {
this.dynamicDataTableGroup = dynamicDataTableGroup;
}
}
essa classe que coloquei acima, é a classe onde recebe por exemplo os dados da TELALINHA, por padrao por exemplo, mas na hora de chamar no meu xhtml, eu teria que alterar isso, e passar outra classe, TELAFORNECEDORES, TELACLIENTES, que nada mais sao minhas tabelas do banco de dados, que possuem informaçoes como nome dos campos formatados “Descrição” e por ai vai…
nao sei se consegui me fazer mais claro agora.
obrigado
abraço!