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:
[code] <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>[/code]
Funciona perfeito. Agora o dataTable 2:
[code] <h:dataTable
value="#{enqueteOpcaoAction.listEnqueteOpcoes}"
var="dadosOp"
binding="#{enqueteOpcaoAction.dataTableOpcao}">
<h:column>
<f:facet name="header">
<h:outputText value="Código"/>
</f:facet>
<h:commandLink
actionListener="#{enqueteOpcaoAction.incluirAction}"
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>
</h:dataTable>[/code]
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:
[code] <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>[/code]
Sempre q tento utilizada 2 dataTables dá algum problema na chamada de actions…
alguem sabe pq acontece isso… :([/code]