PrimeFaces - p:dataTable + p:confirmDialog + p:confirmDialog + f:setPropertyActionListener - Valor Null

686 views
Skip to first unread message

LoCo On Line

unread,
Apr 3, 2015, 7:43:45 PM4/3/15
to jav...@googlegroups.com
Senhores,

Estou com o problema que parece ser o mais comum de todos, mas não encontro um solução.

Estou construindo uma tela que tem um form e dentro um p:dataTable, para ter a coluna de edição coloquei um p:commandLink que chama o p:confirmDialog para executar o <p:commandButton id="deleteConfirmation"

Tudo isso funciona, mas não consigo passar o ID de forma nenhuma para o bean

O <p:commandButton id="deleteConfirmation" chama o metodo, mas não pego o ID 


                                  <div class="table-responsive">
<h:form id="form">
<p:dataTable id="categoriesTable" var="category" value="#{categoriesView.allinLazyModel}" paginatorPosition="bottom" paginator="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown} {CurrentPageReport}"
rowsPerPageTemplate="10,20,50" rows="10" lazy="true" sortBy="#{category.name}">
<p:column headerText="Id" style="width:60px;">
<h:outputText value="#{category.id}" />
</p:column>
<p:column headerText="#{messages.CategoryName}" sortBy="#{category.name}" filterBy="#{category.name}" styleClass="text-left">
<h:outputText value="#{category.name}" />
</p:column>
<p:column headerText="#{messages.CategoryFather}" sortBy="#{category.fatherName}" filterBy="#{category.fatherName}" styleClass="text-left">
<h:outputText value="#{category.fatherId} #{category.fatherName}" />
</p:column>
<p:column headerText="#{messages.CategoryOrderDisplay}" sortBy="#{category.orderDisplay}" filterBy="#{category.orderDisplay}" styleClass="text-left">
<h:outputText value="#{category.orderDisplay}" />
</p:column>
<p:column headerText="#{messages.CategoryVisible}" sortBy="#{category.visible}" filterBy="#{category.visible}" styleClass="text-left">
<h:outputText value="#{category.visible}" />
</p:column>
<p:column headerText="Action" styleClass="text-right" style="width:120px;">
<h:link outcome="catalog/change/category" title="#{messages.Edit}">
<f:param name="id" value="#{category.id}" />
<i class="btn btn-primary fa fa-pencil"></i>
</h:link>
<p:commandLink icon="fa fa-trash-o" id="category-delete">
<p:confirm header="#{messages.Confirmation}" message="#{messages.Areyousuretoremove}" icon="ui-icon-alert" />
<f:setPropertyActionListener value="#{category.id}" target="#{categoriesRequest.id}" />
<i class="btn btn-danger fa fa-trash-o"></i>
</p:commandLink>
</p:column>
</p:dataTable>
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade" severity="alert">
<p:commandButton id="deleteConfirmation" value="#{messages.Yes}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check"
action="#{categoriesRequest.delete}" />
<p:commandButton value="#{messages.No}" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</h:form>
</div>


Informações para debug:
* - Só existe um form em todo html
* - categoriesRequest é um bean do tipo @Request 
* - Já tentei colocar o p:confirmDialog ou os p:commandButton em outros forms
* - Já tentei colocar o f:setPropertyActionListener no p:commandButton
* - O p:commandLink já foi p:commandButton e mesmo assim não funciona

Estou usando o WildFly 8.x , primefaces-5.2.RC3 e o JSF 2.2.8

Por favor, alguém tem alguma ideia de como fazer isso funcionar?

Atenciosamente,

Paulo Ferreira

Wendel Guedes

unread,
Apr 4, 2015, 11:22:18 PM4/4/15
to jav...@googlegroups.com
Bom dia!

Considerando que esteja tudo certo no seu controle.

Tente desta forma:

<p:column style="width:50px;" headerText="Excluir">
      <p:commandButton id="btnConfirmarExclusao" onclick="formCorpo:confirmacaoExclusao.show()" icon="ui-icon-trash">
  <f:setPropertyActionListener value="#{banco}" target="#{BancoControl.banco}" />
      </p:commandButton>
</p:column> 

<p:confirmDialog message="Confirma a exclusão deste registro?" header="Confirmação de exclusão" severity="alert" widgetVar="confirmacaoExclusao">
     <p:commandButton id="btnSim" value="Sim" oncomplete="confirmacaoExclusao.hide()" actionListener="#{BancoControl.excluir }" update="@form" />
     <p:commandButton id="btnNao" value="Não" onclick="confirmacaoExclusao.hide()" type="button" />
</p:confirmDialog>

LoCo On Line

unread,
Apr 4, 2015, 11:22:20 PM4/4/15
to jav...@googlegroups.com
Respondendo a mim mesmo... :)

Descobri o problema.

Como fica o form:

<h:form id="tabela">
<p:dataTable id="categoriesTable" var="category" value="#{categoriesView.allinLazyModel}" paginatorPosition="bottom" paginator="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown} {CurrentPageReport}"
rowsPerPageTemplate="10,20,50" rows="10" lazy="true" sortBy="#{category.name}" reflow="true" resizableColumns="true">
<p:column headerText="ID" style="width:60px;">
<h:outputText value="#{category.id}" />
</p:column>
<p:column headerText="#{messages.CategoryName}" sortBy="#{category.name}" filterBy="#{category.name}" styleClass="text-left">
<h:outputText value="#{category.name}" />
</p:column>
<p:column headerText="#{messages.CategoryFather}" sortBy="#{category.fatherName}" filterBy="#{category.fatherName}" styleClass="text-left">
<h:outputText value="#{category.fatherId} #{category.fatherName}" />
</p:column>
<p:column headerText="#{messages.CategoryOrderDisplay}" sortBy="#{category.orderDisplay}" filterBy="#{category.orderDisplay}" styleClass="text-left">
<h:outputText value="#{category.orderDisplay}" />
</p:column>
<p:column headerText="#{messages.CategoryVisible}" sortBy="#{category.visible}" filterBy="#{category.visible}" styleClass="text-left">
<h:outputText value="#{category.visible}" />
</p:column>
<p:column headerText="Action" styleClass="text-right" style="width:120px;">
<h:link outcome="catalog/change/category" title="#{messages.Edit}">
<f:param name="id" value="#{category.id}" />
<i class="btn btn-primary fa fa-pencil"></i>
</h:link>
<p:commandLink id="category-delete" update=":tabela:categoriesTable" action="#{categoriesView.delete}">
<f:setPropertyActionListener value="#{category.id}" target="#{categoriesView.id}" />
<p:confirm header="#{messages.Confirmation}" message="#{messages.Areyousuretoremove}" icon="ui-icon-alert" />
<i class="btn btn-danger fa fa-trash-o"></i>
</p:commandLink>
</p:column>
</p:dataTable>
<p:confirmDialog global="true" showEffect="fade" hideEffect="fade" severity="alert">
<p:commandButton id="deleteConfirmation" value="#{messages.Yes}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="#{messages.No}" styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</h:form>


O que muda é que todos os bean envolvidos tem que ser do tipo @ViewScoped
Isso por causa do ajax.

Valeu pessoal.
Reply all
Reply to author
Forward
0 new messages