Passar parametro em um <p:confirmDialog>

10 respostas
D

Bom dia!

Tenho uma p:dataTable, onde uma coluna é “Excluir”, eu tinha nessa coluna:

&lt;h:commandButton value="Excluir" onclick="confirmation.show()" action="#{destinoBean.remover} type="button"&gt;
	&lt;f:param id="id" name="id" value="#{s.id}" /&gt;
&lt;/h:commandButton&gt;

Mas não pede confirmação para excluir, aí pensei em usar um p:confirmDialog, e fiz assim:

&lt;h:commandButton value="Excluir" onclick="confirmation.show()"type="button"&gt;
	&lt;!-- &lt;f:param id="id" name="id" value="#{s.id}" /&gt; --&gt;
&lt;/h:commandButton&gt;

&lt;p:confirmDialog
	message="Confirma a Exclusão do Registro #{s.id} ?"
	showEffect="bounce" hideEffect="explode"
        header="Confirma exclusão?" severity="alert"
	widgetVar="confirmation"&gt;
	&lt;p:commandButton value="Sim" update="messages"
	oncomplete="confirmation.hide()" action="#{destinoBean.remover}"
	ajax="false"&gt;
		&lt;f:param id="id" name="id" value="#{s.id}" /&gt;
	&lt;/p:commandButton&gt;
	&lt;p:commandButton value="Não" onclick="confirmation.hide()"
	type="button" /&gt;
&lt;/p:confirmDialog&gt;

Porém, na parte “Confirma a Exclusão do Registro #{s.id} ?” o s.id retornado é o último registro da minha dataTable, independente de qual registro eu clicar no botão. Alguém sabe onde está meu equívoco?
:lol:
Vlw

Douglas

10 Respostas

D

Ninguém ?!

Galera, já fiz vários testes, mas não consegui obter o resultado esperado, será que alguem pode dar uma força aí ?

Obrigado

Douglas

E

Tenho um problema semelhante, mas a diferença é que não exibe a tela.

No seu caso pega o último pois você deve estar instanciando o objeto antes (por um datatable por exemplo) então eu mandaria o objeto onde “s” em target=“destinoBean.s” é o nome do seu obj em destinoBean.

<h:commandButton value=“Excluir” onclick=“confirmation.show()” action="#{destinoBean.remover} type=“button”>

<f:setPropertyActionListener value="#{s}" target="#{destinoBean.s}" />

</h:commandButton>
A

Vê se isso ajuda: http://javasemcafe.blogspot.com/2010/11/crud-em-pdialog-com-primefaces-11.html

E

Alterar funciona legal, pois está dentro do dataTable. Porém o excluir chamo um confirmDialog e está fora.

Tenho o seguinte:

&lt;p:dataTable var="pastelTable" value="#{PastelMB.listaRegistros}"
                     paginator="true" rows="10"
                     emptyMessage="Nenhum registro encontrado."
                     paginatorPosition="bottom"
                     id="tabelaPastel"
                     loadingMessage="Carregando..."
                     &gt;
        &lt;p:column width="100"&gt;

            &lt;f:facet name="header"&gt;

                 &lt;h:outputText value="Excluir"/&gt;

           &lt;/f:facet&gt;

                 &lt;p:commandButton value="Excluir registro" onclick="cd.show()"
                                  style="height: 30px; font-size: 14px"
                                  update="tabelaPastel, cd, aviso"
                                  &gt;

                    &lt;f:setPropertyActionListener value="#{pastelTable}" target="#{PastelMB.pastel}" /&gt;

                 &lt;/p:commandButton&gt;

        &lt;/p:column&gt;

	&lt;/p:dataTable&gt;


&lt;h:form&gt;
    &lt;p:confirmDialog message="Tem certeza que deseja excluir o registro #{PastelMB.pastel.nome} ?"
           header = "Excluir registro" severity="alert" widgetVar="cd"&gt;

        &lt;p:commandButton value ="Sim" actionListener="#{PastelMB.remove}" onclick="cd.hide()"
                update="aviso, tabelaPastel"&gt;
        &lt;/p:commandButton&gt;

        &lt;p:commandButton value ="Não" onclick="cd.hide();" update="cd"/&gt;

    &lt;/p:confirmDialog&gt;
&lt;/h:form&gt;

A janela de confirmação pega o primeiro registro sempre. Depois mesmo clicando em outro registro sempre mostra o mesmo nome. E o estranho que deleta corretamente. Precisaria recarregar esse astelMB.pastel.nome ao chamar a janela. Acredito que resolveria.

Alguma ideia ?

A

Você precisa dar um update no h:form que envolve o p:confirmDialog e não no p:confirmDialog mesmo

E

Tentei o seguinte código mas somente o que mudou foi que a tela se duplica:

<h:form id="formExcluir">
    <p:confirmDialog message="Tem certeza que deseja excluir o registro #{PastelMB.pastel.nome} ?"
                     header = "Excluir registro" severity="alert" widgetVar="cd">

        <p:commandButton value ="Sim" actionListener="#{PastelMB.remove}" onclick="cd.hide()"
                update="aviso, tabelaPastel, formExcluir">
        </p:commandButton>

        <p:commandButton value ="Não" onclick="cd.hide();" update="formExcluir" />

    </p:confirmDialog>
</h:form>
A

No meu caso uso assim no commandButton:

&lt;p:commandButton actionListener="#{filialBean.selecionar}" update="formDesabilitarFilial" image="selecionar" title="Selecionar" oncomplete="dlgTabelaFiliais.hide()" &gt; &lt;f:attribute name="codigo" value="#{filial.codigo}" /&gt; &lt;/p:commandButton&gt;
e no confirmDialog:

&lt;p:confirmDialog widgetVar="dlgDesabilitarFilial" header="Desabilitar Filial" message="Deseja desabilitar a filial?" severity="alert" &gt; &lt;h:form id="formDesabilitarFilial"&gt; &lt;p:commandButton value="Sim" actionListener="#{filialBean.desabilitar}" update="growl,formDadosFilial,formTabelaFiliais" oncomplete="dlgDesabilitarFilial.hide()" immediate="true" image="ok"/&gt; &lt;p:commandButton value="Não" onclick="dlgDesabilitarFilial.hide()" immediate="true" image="cancelar" /&gt; &lt;/h:form&gt; &lt;/p:confirmDialog&gt;

E

Não consegui fazer funcionar no 2.1 que é o usado aqui na empresa. Vou testar no 2.2 em casa só para ver como deveria ser feito.

Resolvi por um dialog mesmo:

<p:dialog header="Excluir registro" widgetVar="dialogDel" resizable="false" modal="true" width="500">

    <h:form prependId="false" id="formDel">

        <h:panelGrid columns="1" style="margin-bottom:10px">
            <h:outputLabel value=" Deseja excluir o pastel #{PastelMB.pastel.nome} ?"/>
         </h:panelGrid>

         <h:panelGrid id="infoDel" columns="2" style="margin-bottom:10px">
            <p:commandButton value ="Sim" actionListener="#{PastelMB.remove}" oncomplete="dialogDel.hide()"
               update="aviso, tabelaPastel" immediate="true">
            </p:commandButton>

             <p:commandButton value ="Não" onclick="dialogDel.hide();" immediate="true"/>
         </h:panelGrid>

    </h:form>

</p:dialog>
R

Passar parametro em um <p:confirmDialog>
Tentei o seguinte código mas somente o que mudou foi que a tela se duplica:

Tenta colocar modal=“false”

K

Solução

<h:form>
						<p:commandButton 
						      id="removeButton"
						      title="#{i18n['tile.remove']}"
						      image="ui-icon ui-icon-close"
						      process="@this"
						      update="form:confirmationMessage"
						      oncomplete="confirmation.show()">
							<f:setPropertyActionListener value="#{marca}" target="#{marcaBean.selectedMarca}" />
						</p:commandButton>

			<p:confirmDialog
				showEffect="bounce" hideEffect="explode" modal="true"
				header="#{i18n['dialog.confirmation.delete.header']} " severity="alert"
				widgetVar="confirmation">
				<f:facet name="message">
					<p:outputPanel id="confirmationMessage">
						<h:outputFormat value="#{i18n['dialog.confirmation.delete.question']}" escape="false">
							<f:param value="#{marcaBean.selectedMarca.nome}" />
						</h:outputFormat>
					</p:outputPanel>
				</f:facet>
				
				<p:commandButton value="Yes Sure" update="messages"
					oncomplete="confirmation.hide()"
					/>
				<p:commandButton value="Not Yet" onclick="confirmation.hide()"
					type="button" />
			</p:confirmDialog>

<h:form>

abraços!

Criado 17 de dezembro de 2010
Ultima resposta 11 de abr. de 2011
Respostas 10
Participantes 5