Projeto OpenSource ajuda em accordion panel com inserção - JSF PrimeFaces

Boa noite, estou trabalhando em um projeto de cursos online que atenderá toda a comunidade, o projeto é na linguagem jsf utilizando Primefaces.

Tenho um problema com accordion panel criei 3 acordion pannel um dentro do outro, um com o nome da etapa, um com as atividades daquela etapa e um com os materiais da etapa, e dentro de cada accordion tem um inserir, no da etapa para inserir etapa assim como alterar, no do material a mesma coisa e assim por diante, porém quando tento utilizar o ontabchange para pegar o id da etapa selecionada ou material que seja além de demorar muito tenho um problema ao executar a tela todos os botões percorrem um tipo de for e são clicados, alguém tem alguma ideia de como fazer isso de uma maneira que funcione, vou postar aqui o xhtm o controller se não intender só avisar.

[code] <h:body style=“font-size: 12px”>
<h:form id=“lista”>
<p:panel header="#{cursoController.curso.nome}" id=“painelCurso”>

            <br/>
            <h:outputText value="Professor: #{cursoController.curso.professor.nome}"/>
            <br/><br/>
            <p:accordionPanel activeIndex="null" id="etapas" value="#{cursoController.curso.etapas}" var="etapas" multiple="true">
                <p:ajax listener="#{cursoController.onTabChangeEtapa}" />
                <p:tab title="#{etapas.descricao}">  
                    <p:commandButton value="Alterar" icon="ui-icon-arrowrefresh-1-w"/>
                    <p:commandButton value="Excluir" icon="ui-icon-close"/>
                    <p:commandButton value="Adicionar Material" icon="ui-icon-disk" onclick="inserirMaterial.show();"/>
                    <p:commandButton value="Adicionar Atividade" icon="ui-icon-disk" />

                    <br/><br/>
                    <h:outputText value="Materiais"/>
                    <br/>
                    <p:accordionPanel activeIndex="null" id="materiais" value="#{etapas.materiais}" var="m" multiple="true">
                        <p:tab title="#{m.nomearquivo}">
                            <p:commandButton value="Alterar"
                                             icon="ui-icon-arrowrefresh-1-w"  
                                             actionListener="#{materialController.prepararAlteriarMaterial()}" 
                                             oncomplete="inserirMaterial.show();"/>
                            <p:commandButton value="Excluir" icon="ui-icon-close"/> <br/><br/>
                        </p:tab>            
                    </p:accordionPanel>
                    <br/>
                    <h:outputText value="Atividades"/>
                    <p:accordionPanel activeIndex="null" id="atividades" value="#{etapas.atividades}" var="a" multiple="true">
                        <p:tab title="#{a.descricao}">  
                            <p:commandButton value="Alterar" 
                                             icon="ui-icon-arrowrefresh-1-w" />
                            <p:commandButton value="Excluir"
                                             icon="ui-icon-close"/> <br/><br/>
                        </p:tab>            
                    </p:accordionPanel>

                </p:tab>    
            </p:accordionPanel>
            <p:commandButton id="inserir" value="Adicionar Etapa" onclick="inserir.show();" icon="ui-icon-disk" type="button"/>


        </p:panel>

    </h:form>

    <p:dialog id="modalDialog" header="Cadastro de Etapa" widgetVar="inserir" modal="true" height="150" width="450" resizable="false">  
        <h:form id="etapa">
            <p:growl id="mess"/>
            <h:panelGrid id="cadastro" columns="2">
                <h:outputLabel value="Descrição"/>
                <p:inputText value="#{etapaController.etapa.descricao}" required="true" maxlength="50" label="Descrição" size="30"/>
                <h:outputLabel value="Status"/>
                <p:selectOneMenu value="#{etapaController.etapa.status}" required="true"  style="width:150px" label="Status">  
                    <f:selectItem itemLabel="Selecione" />  
                    <f:selectItem itemLabel="Ativo" itemValue="Ativo" />  
                    <f:selectItem itemLabel="Inativo" itemValue="Inativo" />  
                </p:selectOneMenu>
                <p:commandButton value="Cadastrar" icon="ui-icon-disk" update=":lista,mess" oncomplete="incluir(xhr, status, args)" actionListener="#{etapaController.inserir}"/>
                <p:commandButton value="Cancelar" icon="ui-icon-close" onclick="inserir.hide();" />
            </h:panelGrid>
        </h:form>
    </p:dialog>

    <p:dialog id="modalDialogInserirMaterial" header="Cadastro de Material" widgetVar="inserirMaterial" modal="true" height="450" width="700" resizable="false">  
        <h:form id="atividade">
            <p:growl id="mess2"/>
            <f:param id="idEtapa" value="#{cursoController.material.idMaterial}" />
            <h:panelGrid id="cadastro" columns="2">
                <h:outputText value="Nome*:"/>
                <p:inputText value="#{cursoController.material.nomearquivo}" required="true" maxlength="20" size="40" label="nome"/>             
                <h:outputText value="Descrição*:"/>
                <p:editor value="#{cursoController.material.descricao}" required="true" label="descricao" cols="43" rows="10" />
                <h:outputText value="Tipo*:"  />
                <p:selectOneMenu value="#{cursoController.material.tipo}" required="true"  style="width:150px" label="Tipo">  
                    <f:selectItem itemLabel="Selecione" />  
                    <f:selectItem itemLabel="Audio" itemValue="Audio" />
                    <f:selectItem itemLabel="Documento de Texto" itemValue="Documento de Texto" />  
                    <f:selectItem itemLabel="Imagem" itemValue="Imagem" />  
                    <f:selectItem itemLabel="Vídeo" itemValue="Vídeo" />  
                </p:selectOneMenu>
                <h:outputLabel value="Arquivo*:"/>
                <p:fileUpload  label="Procurar"  mode="advanced" required="true" 
                               auto="true" sizeLimit="100000000" />
                <p:commandButton value="Cadastrar" update="mess2" actionListener="#{cursoController.inserirMaterialNaEtapa()}"/>
                <p:commandButton value="Cancelar" oncomplete="inserirMaterial.hide();" />
            </h:panelGrid>
        </h:form>
    </p:dialog>

    <script type="text/javascript">  
        function incluir(xhr, status, args) {  
            if(args.validationFailed) {  
                jQuery('#inserir').effect("shake", { times:3 }, 100);  
            } else {  
                inserir.hide();  
                jQuery('#loginLink').fadeOut();  
            }  
        }  
    </script> 



</h:body>[/code]

controller

[code]public class CursoController implements Serializable {
//all

int aux = 0;
//curso
private CursoBean curso = new CursoBean();
private CursoBean cursoAluno = new CursoBean();
//etapa
public EtapaBean etapaSelecionada = new EtapaBean();
//material
private MaterialBean material = new MaterialBean();
public MaterialBean materialSelecionado = new MaterialBean();
private boolean alterarMaterial = true;
//atividade
private AtividadeBean atividade = new AtividadeBean();
public AtividadeBean atividadeSelecionada = new AtividadeBean();
private boolean alterarAtividade = true;

//get/set
public void setAtividade(AtividadeBean atividade) {
    this.atividade = atividade;
}

public AtividadeBean getAtividade() {
    return atividade;
}

public MaterialBean getMaterial() {
    return material;
}

public void setMaterial(MaterialBean material) {
    this.material = material;
}

//inserir, alterar e excluir
public void prepararAlterarMaterial(ActionEvent action) {
    aux = aux + 1;
    alterarMaterial = false;
    System.out.println("fudeu pq ele percorre a lista--> " + aux);

}

public void prepararAlterarAtividade(ActionEvent action) {
    alterarAtividade = false;
}

public void inserirMaterialNaEtapa() {

    material.setEtapa(etapaSelecionada);
    try {
        if (alterarMaterial == true) {
            MaterialDAO.inserir(material);
            Mensagem.mensagem("Material incluído com Sucesso");
            System.out.println(material.getNomearquivo() + " adicionado com sucesso");
        } else if (alterarMaterial == false) {
            material.setIdMaterial(materialSelecionado.getIdMaterial());
            MaterialDAO.alterar(material);
            Mensagem.mensagem(material.getNomearquivo() + " foi alterado");

        }
        limpaMaterial();
        alterarMaterial = true;
    } catch (Exception e) {
        e.printStackTrace();
        Mensagem.mensagem("Erro");
    }
}

public void inserirAtividadeNaEtapa() {
    try {

        atividade.setEtapa(etapaSelecionada);
        if (alterarAtividade == true) {
            AtividadeDAO.inserir(atividade);
            Mensagem.mensagem("Atividade incluída com Sucesso");
            System.out.println(atividade.getNomearquivo() + " adicionada com sucesso");
        } else if (alterarAtividade == false) {
            atividade.setIdAtividade(atividadeSelecionada.getIdAtividade());
            AtividadeDAO.alterar(atividade);
            Mensagem.mensagem("Atividade alterada com Sucesso");
            System.out.println(atividade.getNomearquivo() + " foi alterada");
        }
    } catch (Exception e) {
        e.printStackTrace();
        Mensagem.mensagem("Erro");
    }
    limpaAtividade();
}

public void excluirMaterial() {
    try {
        MaterialDAO.excluir(materialSelecionado);
        Mensagem.mensagem("Excluído com sucesso");
        System.out.println(materialSelecionado.getNomearquivo() + " excluido com sucesso!");
    } catch (Exception e) {
        e.printStackTrace();
        Mensagem.mensagem("Erro ao excluir");
    }
}

//limpar
public void limpaAtividade() {
    atividade = new AtividadeBean();
}

public void limpaMaterial() {
    material = new MaterialBean();
}

//tab change
public void onTabChangeEtapa(TabChangeEvent event) {
    try {
        etapaSelecionada = (EtapaBean) event.getData();
        System.out.println("Etapa selecionada = " + etapaSelecionada.getDescricao()+" id="+etapaSelecionada.getIdEtapa());
    } catch (Exception e) {
        e.printStackTrace();
    }


}

public void onTabChangeMaterial(TabChangeEvent event) {
    try {
        materialSelecionado = (MaterialBean) event.getData();
        System.out.println("Material selecionado = " + materialSelecionado.getNomearquivo()+" id material "+materialSelecionado.getIdMaterial());
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public void onTabChangeAtividade(TabChangeEvent event) {
    try {
        atividadeSelecionada = (AtividadeBean) event.getData();
        System.out.println("Atividade Selecionada = " + atividadeSelecionada.getNomearquivo());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

  public CursoBean getCurso() {
    try {
        return CursoDAO.getCurso(2);
    } catch (SQLException ex) {
        ex.printStackTrace();
        return null;
    }
}

public void setCurso(CursoBean curso) {
    this.curso = curso;
}

}[/code]

Agradeço muito se ajudarem

Boa Tarde

Favor Testar … :!:

  1. Retire ou Comente os commandButtom sem Ação onclick,action ou actionListenert;
  2. Teste dar um update em algo no evento ajax onTabChange.
  3. Tente colocar um panelGrid dentro das tabs.

Testar item por item …

[quote=CLEYSON]Boa Tarde

Favor Testar … :!:

  1. Retire ou Comente os commandButtom sem Ação onclick,action ou actionListenert;
  2. Teste dar um update em algo no evento ajax onTabChange.
  3. Tente colocar um panelGrid dentro das tabs.

Testar item por item …[/quote]

Olá Obrigado pela ajuda, porém não obtive sucesso, quando eu retiro os comand button até funciona, porém eu preciso dos botões para adicionar novas atividades ou etapas, eu tentei dar um update ou ativação por onclick ou actionlistner no tab change e acabou não funcionado da erro. o panelgrid funcionou porém ainda percorre o “for” do botão…

Obrigado por enquanto!

Boa Tarde

A idéia era tirar os commandButton declarados sem evento …
Ex:

<p:commandButton value="Alterar" icon="ui-icon-arrowrefresh-1-w"/>  

Ou colocar evento neles …

Por favor, ao postar tópicos, NÃO DEIXE O TÍTULO INTEIRO EM LETRAS MAIÚSCULAS.