tenho uma classe onde cria a minha table, e uma classe onde criei para alimentar dois botoes que vai ser adicionados nessa table
que eu crio primeiro colunas depois linhas e faço apos isso a concatenaçao, coluna x linhas…e no final de cada uma das linhas de registro é adicionado os botoes
Codigo Descricao Tipo Alterar Excluir
01 Maria F botao botao
ficaria mais ou menos assim
a tela está sendo criada, tranquilamente…
aqui vai os codigos:
@ManagedBean
@SessionScoped
public class CriaGrid {
// Init
// --------------------------------------------------------------------------------------
private static List<List<String>> dynamicList; // Simulate fake DB.
private static String[] dynamicHeaders; // Optional.
private HtmlPanelGroup dynamicDataTableGroup; // Placeholder.
private GridTelaPadrao tipoTelas = null;
// Actions
// -----------------------------------------------------------------------------------
public CriaGrid() {
super();
}
public CriaGrid(GridTelaPadrao obj) throws SQLException {
super();
tipoTelas = obj;
}
private void loadDynamicList() throws SQLException {
Conexao consulta = new Conexao();
consulta.Conecta();
// 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(""); // botao alterar
campos.add(""); // botao 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);
// *******criaçao dos botoess************
if (i + 2 == dynamicList.get(0).size()) {
FacesContext fctx = FacesContext.getCurrentInstance();
ELContext elctx = fctx.getELContext();
Application app = fctx.getApplication();
ExpressionFactory exprFactory = app.getExpressionFactory();
HtmlCommandButton edit = (HtmlCommandButton) app
.createComponent(HtmlCommandButton.COMPONENT_TYPE);
edit.setId("edit");
edit.setValueExpression("value", exprFactory
.createValueExpression(elctx,
"#{transacaoLinhas.gridEdit}", String.class));
column.getChildren().add(edit);
} else if (i + 1 == dynamicList.get(0).size()) {
FacesContext fctx = FacesContext.getCurrentInstance();
ELContext elctx = fctx.getELContext();
Application app = fctx.getApplication();
ExpressionFactory exprFactory = app.getExpressionFactory();
HtmlCommandButton delete = (HtmlCommandButton) app
.createComponent(HtmlCommandButton.COMPONENT_TYPE);
delete.setId("delete");
delete.setValueExpression("value", exprFactory
.createValueExpression(elctx,
"#{transacaoLinhas.gridDelete}", String.class));
column.getChildren().add(delete);
}
}
// 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 (tipoTelas != null) {
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;
}
}
aqui vai o managebean para os botoes
@ManagedBean
@RequestScoped
@SessionScoped
@ApplicationScoped
@ViewScoped
public class TransacaoLinhas {
public String getGridEdit(){
System.out.println("chegou aqui pela grid Editar");
return "Alterar";
}
public String getGridDelete(){
System.out.println("chegou aqui pela grid Delete");
return "Excluir";
}
}
O meu problema está na seguinte situaçao, toda vez que eu clico por exemplo no botao Alterar, ele executa o MB do altera e o MB tbm do excluir, e isso ele faz para toda a quantidade de registros que eu tenho, ou seja, se eu tiver 16 registros, e clicar no botao Alterar, vai executar 16 vezes os dois MBs (Alterar e Excluir)
Alguma ideia de onde está o erro?