2012-02-01 14 views
8

Zajmuję się tworzeniem aplikacji w JSF 2.0. Używam również biblioteki komponentów Primefaces. Mam problem z p: confirmDialog of Primefaces. Jak tylko chcę pokazać p: confirmDialog, znika on niemal natychmiast. Najdziwniejsze jest to, że problem ten występuje tylko w przypadku aplikacji wdrożonej na serwerze GlassFish w pracy. Kiedy przesyłam ten sam plik .war do serwera GlassFish na moim komputerze w domu lub kiedy uruchamiam aplikację w Netbeans, ten problem nie występuje. Naprawdę nie mogę się dowiedzieć, jaka jest przyczyna tego problemu. Ponadto nie mogłem znaleźć żadnych informacji na ten temat w Google. Każda pomoc będzie bardzo ceniona! To jest mój kod:Okno dialogowe potwierdzenia priorytetów znika niemal natychmiast

<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

Czy chodziło Ci Ctrl + F5 strona, która jest otwarta z serwera pracy lub przynajmniej wyczyść pamięć podręczną przeglądarki w całej domenie, aby upewnić się, że masz l atest wersji elementów CSS/JS zawartych w PrimeFaces? Być może w międzyczasie zaktualizowałeś PrimeFaces i nadal masz stary JS z domeny w pamięci podręcznej przeglądarki. – BalusC

+0

To prawda, że ​​zaktualizowałem bibliotekę PrimeFaces do innej wersji podczas tworzenia aplikacji. Co poleciłbyś mi zrobić? Czy jest coś, co powinienem zrobić po stronie serwera? – Bart1990

+0

Jak wspomniano, wyczyść pamięć podręczną przeglądarki. – BalusC

Odpowiedz

16

Kliknięcie przycisku spowoduje przesłanie. Pojawi się okno dialogowe, a strona zostanie natychmiast załadowana ponownie.

Zmień to:

bezoekConfirmation.show() 

do tego:

bezoekConfirmation.show(); return false; 

To naprawdę dziwne, że twoja wersja pracuje na komputerze w domu.

+0

Dziwne. –

+0

Zmieniono również typ h: commandButton na "reset". – Bart1990

+2

p: commandButton type = "button" jest tym, czego potrzebujesz. –

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" będzie przezwyciężyć problem

4

Rozwiązanie z return false; będzie działać tylko wtedy, gdy nie zamierzamy wywołać metodę lub ustawić zmienną.

W takim przypadku wystarczy użyć oncomplete="dialog.show();" zamiast onclick="dialog.show();" To przejdzie przez wywołanie metody.


Przykład:

Biorąc pod uwagę, że poniższy kod jest w jakiejś tabeli danych, to możesz mieć

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

lub zadzwoń ustawiająca bezpośrednio

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

2017, zmiana onclick na oncomplete nadal jest prawidłową odpowiedzią, thx! –

Powiązane problemy