2012-02-01 13 views
8

Sto sviluppando un'applicazione in JSF 2.0. Sto anche usando la libreria dei componenti Primefaces. Sto riscontrando un problema con p: confirmDialog di Primefaces. Non appena voglio mostrare una p: confirmDialog, scompare di nuovo quasi istantaneamente. La cosa più strana è che questo problema si verifica solo con l'applicazione distribuita sul server GlassFish al lavoro. Quando carico lo stesso file .war sul server GlassFish sul mio computer a casa o quando eseguo l'applicazione in Netbeans, questo problema non si verifica. Non riesco davvero a scoprire quale sia la causa di questo problema. Inoltre, non ho trovato alcuna informazione su questo su Google. Qualsiasi aiuto sarebbe molto apprezzato! Questo è il mio codice:Primefaces che confermano la scomparsa della finestra di dialogo quasi istantaneamente

<h:commandButton value="Verwijderen" onclick="bezoekConfirmation.show()" styleClass="verwijderKnopBig" rendered="#{pageRenderController.canWriteBezoekenMobiele}" /> 
<p:confirmDialog message="Bent u zeker dat u dit bezoek wilt verwijderen?" closable="false" 
    header="Bezoek verwijderen" severity="alert" widgetVar="bezoekConfirmation"> 
    <p:commandButton value="Ja" oncomplete="bezoekConfirmation.hide()" action="#{bezoekenMobieleController.deleteBezoek}" ajax="false" /> 
    <p:commandButton value="Nee" onclick="bezoekConfirmation.hide()" type="button" /> 
</p:confirmDialog> 
+0

Forse Ctrl + F5 la pagina che viene aperta dal server di lavoro o almeno svuota la cache del browser sull'intero dominio per assicurarti di avere la l la versione atest del materiale Prime/Prime di CSS/JS incluso? Forse hai aggiornato PrimeFaces nel frattempo e hai ancora il vecchio JS dal dominio nella cache del browser. – BalusC

+0

È vero che ho aggiornato la libreria PrimeFaces ad un'altra versione durante lo sviluppo dell'applicazione. Cosa mi consiglieresti di fare? C'è qualcosa che dovrei fare sul lato server? – Bart1990

+0

Come detto, cancella la cache del browser. – BalusC

risposta

16

Fare clic sul pulsante causerà un invio. Viene visualizzata la finestra di dialogo e la pagina viene ricaricata immediatamente.

Modifica questo:

bezoekConfirmation.show() 

a questo:

bezoekConfirmation.show(); return false; 

E 'davvero strano che la versione funziona sul vostro computer a casa.

+0

Strano davvero. –

+0

Inoltre, ho cambiato il tipo h: commandButton in "reset". – Bart1990

+2

p: commandButton type = "button" è quello che ti serve. –

1
<h:commandButton value="Verwijderen" onclick="bezoekConfirmation.show()" styleClass="verwijderKnopBig" rendered="#{pageRenderController.canWriteBezoekenMobiele}" /> 
<p:confirmDialog message="Bent u zeker dat u dit bezoek wilt verwijderen?" closable="false" 
    header="Bezoek verwijderen" severity="alert" widgetVar="bezoekConfirmation" appendToBody="true"> 
<p:commandButton value="Ja" oncomplete="bezoekConfirmation.hide()" action="#{bezoekenMobieleController.deleteBezoek}" ajax="false" /> 
    <p:commandButton value="Nee" onclick="bezoekConfirmation.hide()" type="button" /> 
</p:confirmDialog> 

appendToBody="true" supereranno il problema

4

La soluzione con return false; funziona solo se non si ha intenzione di chiamare un metodo o impostare una variabile.

In questo caso, utilizzare solo oncomplete="dialog.show();" anziché onclick="dialog.show();" Questo passerà attraverso la chiamata al metodo.


Esempio:

Dato che il codice riportato di seguito è in una sorta di tabella di dati, allora si può avere

<p:commandButton value="edit" update=":dialog" oncomplete="dialog.show();"> 
<f:setPropertyActionListener target="#{bean.field}" value="#{_item}" /> 
</p:commandButton> 

o chiamare il setter direttamente

<p:commandButton value="edit" update=":dialog" oncomplete="dialog.show();" action="bean.setField(_item)"> 
</p:commandButton> 
+1

2017, la modifica di onclick su oncomplete è ancora una risposta valida, grazie! –

Problemi correlati