2013-01-18 9 views
10

Po naciśnięciu przycisku Save, dane z actionsDialog powinny zostać zatwierdzone. Jeśli wymagana informacja zostanie wprowadzona i będzie ważna, zostanie wyświetlone drugie okno dialogowe o nazwie reasonDialog.Jak wywołać args.validationFailed w PrimeFaces oncomplete

Sprawdzanie poprawności obiektu zapisane przez JSF odbywa się za pomocą metody zwracającej listę komunikatów o błędach. I przypadek sprawdzania poprawności nie powiedzie się komunikaty o błędach są wyświetlane z FacesMessage. Jak mam zrobić w objectsBean.validate, aby uruchomić klauzulę if else z oncomplete?

<p:dialog id="actionsDialog" widgetVar="actionsDialog" dynamic="true" 
    resizable="false" width="800" modal="true"> 
    <ui:include src="/WEB-INF/flows/custom-flow/genericObject.xhtml"/> 
    <f:facet name="footer"> 
     <p:commandButton value="Save" update="msgs" 
      oncomplete="if (args.validationFailed) {reasonDialog.hide()} else {reasonDialog.show()}" 
      actionListener="#{objectsBean.validate}"/> 
     <p:commandButton value="Cancel" immediate="true" oncomplete="actionsDialog.hide()" /> 
    </f:facet> 
</p:dialog> 

Odpowiedz

17

Jeśli wykorzystaniem JSF-wbudowane usługi walidacji (czyli po prostu użyć weryfikatorów, które rzucają ValidatorException zwykły sposób w nim pożądanego twarze wiadomości) nie jest to opcja dla jakiegoś powodu (ja tak naprawdę pomyśleć dwa razy, nie trzykrotnie w odniesieniu do pracy w walidacji JSF), zawsze można użyć FacesContext#validationFailed(), aby zasygnalizować JSF, że walidacja ogólnie się nie udała, co jest dokładnie tym, co działa funkcja sprawdzania poprawności JSF pod osłonami, gdy zostanie przechwycona ValidatorException.

FacesContext.getCurrentInstance().validationFailed(); 
+0

Albo to zrobię, albo wyrzucę wyjątek, cykl życia JSF będzie kontynuowany, aktualizuje wartości modelu i wywołuje aplikację. Czy istnieje sposób na zatrzymanie renderowania strony w przypadku niepowodzenia sprawdzania poprawności? – MounirReg

+0

@Mounir: To nie jest normalne zachowanie. Po prostu zadaj pytanie zgodnie z instrukcjami pod adresem http://stackoverflow.com/tags/jsf/info, abyśmy mogli obserwować, debugować i usuwać problem, na wypadek gdybyś nie wykonywał tego zadania. – BalusC

Powiązane problemy