Múltiplos ConfirmDialog (primefaces) na tela

Boa tarde. Sou novo no fórum e no html.
Em uma tela tenho 3 botões que precisam de confirmações diferentes.
O problema é que eles estão abrindo o mesmo confirmdialog… A mensagem muda, mas os 3 abrem os botões “Yes3” e “No3”. Queria cada um abrindo o seu, respectivamente. Alguém pode ajudar?
Segue código… ainda não finalizado

<h:form>
<p:commandButton style=“font-size:92%;” value=“Reestimar” onclick=“confirmareestima.show()”
icon=“ui-icon-circle-plus” actionListener="#{managerBean.localizareqopavanc}" ajax=“true” >
<p:confirm header=“Confirmação” message=“Reestimar?” icon=“ui-icon-alert” />
</p:commandButton>

		<p:commandButton style="font-size:92%;" value="Encerrar" onclick="confirmaencerra.show()"
						 icon="ui-icon-circle-close" actionListener="#{managerBean.localizareqopavanc}" ajax="true" >
    		<p:confirm header="Confirmação" message="Encerrar?" icon="ui-icon-alert" />
		</p:commandButton>
		
		<p:commandButton style="font-size:92%;" value="Reabrir" onclick="confirmareabrir.show()"
						 icon="ui-icon-circle-arrow-s" actionListener="#{managerBean.localizareqopavanc}" ajax="true" >
    		<p:confirm header="Confirmação" message="Reabrir?" icon="ui-icon-alert" />
		</p:commandButton>

	    <p:confirmDialog global="true" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmareestima" appendToBody="true">
		    <p:commandButton value="Yes1" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
        	<p:commandButton value="No1" type="button" styleClass="ui-confirmdialog-no" onclick="confirmareestima.hide()" icon="ui-icon-close" />
    	</p:confirmDialog>							 

	    <p:confirmDialog global="true" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmaencerra" appendToBody="true">
		    <p:commandButton value="Yes2" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
        	<p:commandButton value="No2" type="button" styleClass="ui-confirmdialog-no" onclick="confirmaencerra.hide()" icon="ui-icon-close" />
    	</p:confirmDialog>							 

	    <p:confirmDialog global="true" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmareabrir" appendToBody="true">
		    <p:commandButton value="Yes3" type="button" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
        	<p:commandButton value="No3" type="button" styleClass="ui-confirmdialog-no" onclick="confirmareabrir.hide()" icon="ui-icon-close" />
    	</p:confirmDialog>							 
	
	</h:form>

Olá @antoniobraga, tudo certo?

O component <p:confirm /> abre o ultimo <p:confirmDialog setado com global="true".

Como você tem vários confirmDialog, é melhor você abrir eles através de onclick, onsuccess ou oncomplete.

Ex:

onclick="PF('confirmareestima').show();

Se a sua versão do PrimeFaces for inferior a 4.0, você não tem que utilizar a função PF, do contrário, tem.

Essa é a ordem de execução das actions e eventos js:

  • onclick
  • actionListener
  • action
  • onsuccess
  • update
  • oncomplete

Obs: Se quiser, você pode remover o ajax="true" dos seus <p:commandButton, pois por padrão eles já são ajax="true"

Oi Mike… funcionou perfeitamente!
Bastou retirar o “p:confirm” e acertar os “onclicks”.

Muito Obrigado pela ajuda! Abraços!

Mike,
Funcionou mas eu parei logo em frente pois os botões do ‘Sim’ não estão chamando o Bean!

<h:form>
<p:commandButton style=“font-size:92%;” value=“Reestimar” onclick=“PF(‘confirmareestima’).show();”
icon=“ui-icon-circle-plus”> </p:commandButton>
<p:commandButton style=“font-size:92%;” value=“Encerrar” onclick=“PF(‘confirmaencerra’).show();”
icon=“ui-icon-circle-close”></p:commandButton>
<p:commandButton style=“font-size:92%;” value=“Reabrir” onclick=“PF(‘confirmareabrir’).show();”
icon=“ui-icon-circle-arrow-s”></p:commandButton>
</h:form>

	  <p:confirmDialog header="Confirmação" message="Reestimar?" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmareestima" appendToBody="true"> 
	      <h:form> 
		    <p:commandButton value="Sim" action="#{managerBean.validabtn()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmareestima').hide();"/>
        	<p:commandButton value="Não" onclick="PF('confirmareestima').hide();" icon="ui-icon-close" />
    	  </h:form>
      </p:confirmDialog>							 

	  <p:confirmDialog header="Confirmação" message="Encerrar Requisição?" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmaencerra" appendToBody="true">
	      <h:form> 
		    <p:commandButton value="Sim" action="#{managerBean.validabtn2()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmaencerra').hide();"/>
        	<p:commandButton value="Não" onclick="PF('confirmaencerra').hide();" icon="ui-icon-close" />
    	  </h:form>
      </p:confirmDialog>							 

	  <p:confirmDialog header="Confirmação" message="Reabrir Requisição?" showEffect="fade" hideEffect="explode" severity="alert" widgetVar="confirmareabrir" appendToBody="true">
	      <h:form> 
		    <p:commandButton value="Sim" action="#{managerBean.validabtn3()}" styleClass="ui-confirmdialog-yes" icon="ui-icon-check" oncomplete="PF('confirmareabrir').hide();"/>
        	<p:commandButton value="Não" onclick="PF('confirmareabrir').hide();" icon="ui-icon-close" />
    	  </h:form>
      </p:confirmDialog>							 
	</h:form> 	

No bean só tenho (ainda falta implementar):
public void validabtn() {
System.out.println(“Valida numero 1”);
}

public void validabtn2() {
	System.out.println("Valida numero 2");
}

public void validabtn3() {
	System.out.println("Valida numero 3");
}

Você esta com dois forms, um dentro do outro.

Coloca os <p:confirmDialog fora do form principal

Depois dessa alteração ve o que acontece e posta como ficou o código caso não funcione ainda

Era isso Mike… Tirei de dentro do form e funcionou corretamente!
Obrigado mais uma vez!!!:+1:

De nada, estamos ai :+1: