2 ou mais DataTables no mesmo formulário (Actions)

2 respostas
C

Boa tarde galera,
estou iniciando nos estudos no JSF então estava fazendo alguns testes com 2 DataTables (Tomahawk) e cada um tem um commandLink com action para exibir os dados do item selecionado.
O primeiro lista as enquetes, o segundo lista as opções da enquete selecionada na primeira tabela.
Legal, o dataTable 1 funciona perfeito, clico lá exibe os dados da enquete e preenche o dataTable 2 com as opções.
Agora no dataTable 2 o action simplesmente não é invocado, clica-se no link a página é recarregada mas não chama o método.
Está assim o dataTable 1:

<t:dataTable 
          value="#{enqueteAction.listaEnquete}"
          var="dados"
          binding="#{enqueteAction.dataTable}">
          
          <h:column>
            <f:facet name="header">
              <h:outputText value="Código"/>
            </f:facet>
            <t:commandLink 
                actionListener="#{enqueteAction.exibirDadosAction}"
                value="#{dados.codigo}"/>
          </h:column>

          <h:column>
            <f:facet name="header">
              <h:outputText value="Pergunta"/>
            </f:facet>
            <h:outputText value="#{dados.pergunta}"/>
          </h:column>          
          
        </t:dataTable>
Funciona perfeito. Agora o dataTable 2:
<t:dataTable
            value="#{enqueteOpcaoAction.listEnqueteOpcoes}"
            var="dadosOp"
            binding="#{enqueteOpcaoAction.dataTableOpcao}">
          
            <h:column>
              <f:facet name="header">
                <h:outputText value="Código"/>
              </f:facet>
              <t:commandLink 
                  actionListener="#{enqueteOpcaoAction.exibirDadosOpcaoAction}"
                  value="#{dadosOp.codigo}"/>
            </h:column>
            
            <h:column>
              <f:facet name="header">
                <h:outputText value="Descrição"/>
              </f:facet>
              <h:outputText value="#{dadosOp.descricao}"/>
            </h:column>
            
        </t:dataTable>
Não chama o método, inclui um logger.info logo na primeira linha para saber se está passando por lá, mas nada é registrado no arquivo de log. Código do action da primeira tabela:
public void exibirDadosAction(ActionEvent event) {
    msg = "";
    try {
      //atualizar o managedBean enquete de acordo com o item selecionado no DataTable
      registroAtual();
      if (enquete != null) {
        setEnqueteManaged();
      }
    }
    catch (Exception err) {
      logger.error("Erro ao exibir: ", err);
    }
  }
Action da segunda tabela:
public void exibirDadosOpcaoAction(ActionEvent event) {
    logger.info("Passou action opcao.");
    msg = "";
    try {
      registroAtualOpcao();
      if (enqueteOp != null) {
        setEnqueteOpcaoManaged();
      }
    }
    catch (Exception err) {
      logger.error("Erro ao exibir dados da opção da enquete:", err);
    }
  }
Neste segundo sequer passa pelo logger... Está tudo mapeado no faces-config:
<managed-bean>
    <managed-bean-name>enquete</managed-bean-name>
    <managed-bean-class>com.mrinfo.controle.Enquete</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

  <managed-bean>
    <managed-bean-name>enqueteAction</managed-bean-name>
    <managed-bean-class>com.mrinfo.action.EnqueteAction</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

  <managed-bean>
    <managed-bean-name>enqueteOpcao</managed-bean-name>
    <managed-bean-class>com.mrinfo.controle.EnqueteOpcao</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

  <managed-bean>
    <managed-bean-name>enqueteOpcaoAction</managed-bean-name>
    <managed-bean-class>com.mrinfo.action.EnqueteOpcaoAction</managed-bean-class>
    <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>
Sempre q tento utilizada 2 dataTables dá algum problema na chamada de actions... alguem sabe pq acontece isso... :(

2 Respostas

keller

Tentou usar um iframe pra segunda tabela ?

C

ainda não, pq teria que separar o conteúdo em outro arquivo jsp já que o iframe carrega uma página.
Pensei em dividir realmente, mas temos algumas aplicações web que precisam de 2 tables as vezes até 3 na mesma página pois uma está ligado à outra.
O problema ocorre apenas com DataTable, acabei de incluir mais 3 actions que seriam do Incluir, Alterar e Excluir uma opção de enquete e estão sendo chamados na boa.
Mas vlw ae a atenção.

Criado 4 de abril de 2007
Ultima resposta 4 de abr. de 2007
Respostas 2
Participantes 2