Apresentar um DataTable depois de clicar em componente selectBooleanCheckbox jsf + RichFaces

5 respostas Resolvido
java
E

Olá, estou com dificuldade em apresentar um dataTable depois de clicar no componente selectBooleanCheckbox.

Tenho dois DataTable o que está com id=“origem” ele é default, será apresentado quando abrir a tela, mas após clicar no selectBooleanCheckbox eu gostaria de apresentar o DataTable de id=“destino” no lugar do default, mas isso não está ocorrendo.

DataTable default origem

<h:panelGroup id="pnlOrigem" rendered="#{meuBean.habilitaTableOri}"> <rich:dataTable id="origem" var="obj" value="#{meuBean.lista1" style="width: 100%;" rows="5"> <rich:column> <f:facet name="header"> <h:outputText value="Codigo" /> </f:facet> <h:outputText value="#{obj.codigo}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Nome" /> </f:facet> <h:outputText value="#{obj.nome}" /> </rich:column> </rich:dataTable> </h:panelGroup>

DataTable que desejo renderizar depois de clicar no componente selectBooleanCheckbox

<h:panelGroup id="pnlDestino" rendered="#{meuBean.habilitaTableDst}"> <rich:dataTable id="destino" var="obj" value="#{meuBean.lista1" style="width: 100%;" rows="5"> <rich:column> <f:facet name="header"> <h:outputText value="Codigo" /> </f:facet> <h:outputText value="#{obj.codigo}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Nome" /> </f:facet> <h:outputText value="#{obj.nome}" /> </rich:column> </rich:dataTable> </h:panelGroup>

Componente selectBooleanCheckbox

<h:panelGroup rendered="#{meuBean.habilitaCampos eq false}"> <h:selectBooleanCheckbox id="tr" value="#{meuBean.transfirSomente}"> <a4j:ajax execute="@this" event="change" render="pnlOrigem,pnlDestino"/> </h:selectBooleanCheckbox> <h:outputText value="Transferir"/> </h:panelGroup>

getTransferirSomente no meu Bean

public void setTransfirSomente(Boolean transfirSomente) { if (transfirSomente) { this.setHabilitaDataTablesDestino(Boolean.TRUE); this.setHabilitaDataTablesOrigem(Boolean.FALSE); } else { this.setHabilitaDataTablesDestino(Boolean.FALSE); this.setHabilitaDataTablesOrigem(Boolean.TRUE); } this.transfirSomente = transfirSomente; }

5 Respostas

campelo.m

Boa tarde,

Coloque as dataTable’s dentro de um h:outputPanel e de um id para cada panel.
No a4j:ajax do h:selectBooleanCheckbox altere de render para reRender e passe os id’s criados para os panels

E

Obrigado pela resposta, vou tentar

E

campelo.m, editei o código em minha pergunta, não deu certo. Tentei usar o h:outputPanel mas obtive um erro de namespace, então usei h:panelGroup e atualizei meu selectBooleanCheckbox como vc citou, mas não está dando certo.

campelo.m
Solucao aceita

Bom dia,

Perdão pelo “h:outputPanel”… rsrs… realmente a tag esta errada… o rendered fica no datatable e não no panelGroup.

O problema é que no inicio da renderização o component existe, mas quando voce manda fazer um reRender, ele nao existe mais. por isso envolvemos o component em uma outra tag para chamar no reRender.

<h:panelGroup id="pnlDestino"> <rich:dataTable id="destino" var="obj" value="#{meuBean.lista1" style="width: 100%;" rows="5" rendered="#{meuBean.habilitaTableDst}"> </rich:dataTable > </h:panelGroup>

<h:panelGroup id="pnlSBC"> <h:selectBooleanCheckbox id="tr" value="#{meuBean.transfirSomente}" rendered="#{meuBean.habilitaCampos eq false}"> <a4j:ajax execute="@this" event="change" render="pnlOrigem,pnlDestino"/> </h:selectBooleanCheckbox> <h:outputText value="Transferir"/> </h:panelGroup>

E

Desculpe pela demora, mais deu certo. Obrigado campeão.m.

Criado 16 de fevereiro de 2016
Ultima resposta 21 de fev. de 2016
Respostas 5
Participantes 2