Usando o DATATABLE PrimeFaces
-
27-09-2019 - |
Pergunta
Estou usando o objeto Datatable PrimeFaces para exibir alguns dados e estou tendo alguns problemas para perceber algo: exibo primeiro uma tabela com apenas 1 coluna e quero exibir outra tabela cheia de dados, dependendo do que o usuário selecionado no primeiro 1.
Para isso, quando o usuário seleciona uma linha na primeira tabela, preenchi o registro CurrentCorbeilleid do meu TaskController e tento atualizar o formulário "Taskslist". Faz sentido quando escrevo isso agora, mas não funciona ... quando clico em uma linha da primeira tabela, nada acontece ...
Estou usando o componente DataTable da maneira certa? O que devo fazer mais para fazê -lo funciona? Obrigado por suas respostas !
<f:view>
<h:form id="mainForm">
<p:dataTable id="corbeillesList"
value="#{IdentityController.groups}"
var="corbeillesList"
rendered="#{not empty IdentityController.groups}"
selectionMode="single"
selection="#{TaskController.currentCorbeilleId}"
update="tasksList">
<p:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:commandLink value="#{corbeillesList.name}">
</h:commandLink>
</p:column>
</p:dataTable>
<p:dataTable id="tasksList"
value="#{TaskController.tasks}"
var="task"
rendered="#{not empty TaskController.tasks}"
selectionMode="single">
<p:column>
<f:facet name="header">
<h:outputText value="Date" />
</f:facet>
<h:outputText value="#{task.duedate}" rendered="#{task.duedate != null}">
<f:convertDateTime pattern="dd/MM/yyyy" type="date" dateStyle="short" />
</h:outputText>
<h:outputText value="Date non definit" rendered="#{task.duedate == null}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{task.name}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Description" />
</f:facet>
<h:outputText value="#{task.description}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Verouillee" />
</f:facet>
<h:outputText value="oui" rendered="#{task.assignee != null}" />
<h:outputText value="non" rendered="#{task.assignee == null}" />
</p:column>
</p:dataTable>
</h:form>
</f:view>
Solução
O segundo DataTable não foi renderizado para o lado do cliente. Portanto, não é acessível para Ajax update
. Coloque -o por exemplo um h:panelGroup
Em vez disso, o que é sempre renderizado para o lado do cliente.
<h:panelGroup id="tasksList">
<h:dataTable rendered="#{not empty TaskController.tasks}" ... >
...
</h:dataTable>
</h:panelGroup>