AWWW-1st3.6-w11.tresc-1.0-Slajd29
ValueChangeListener – Przykład (2/2)
Działanie metody obsługującej zdarzenie zmiany stanu przycisku polega na programowym modyfikowaniu wartości atrybutu DISABLED przycisku metodą setDisabled() zależnie od stanu pola wyboru (1). Ze względu na sposób przetwarzania żądań przez JSF konieczne jest jednak dodanie na końcu ciała metody kodu rozwiązującego problem „niechcianej” walidacji zilustrowany na slajdzie.
Konieczność zatwierdzenia formularza w celu wywołania metody obsługującej zdarzenie zmiany stanu pola wyboru stanowi problem, gdy z pozostałymi komponentami do wprowadzania danych zostały związane walidatory, tak jak w naszym przykładzie. Nie można wymagać od użytkownika wypełnienia wszystkich pól formularza przed zmianą stanu pola wyboru, który logicznie nie kończy pracy z formularzem. Problem niechcianej walidacji należy rozwiązać podobnie jak w poprzednim przykładzie dla przycisku, poprzez ustawienie dla pola wyboru atrybutu IMMEDIATE. Ustawienie atrybutu IMMEDIATE dla komponentu do wprowadzania danych, takiego jak pole wyboru powoduje, że walidacja danych w komponencie i obsługa zdarzeń przez niego generowanych nastąpi przed walidacją pozostałych komponentów formularza. Aby walidacja pozostałych komponentów w ogóle nie została przeprowadzona, należy poprzez odwołanie do kontekstu JSF w metodzie ValueChangeListener metodą renderResponse() skrócić normalne przetwarzanie żądania, pomijając walidację i przechodząc do fazy generacji wynikowego dokumentu dla przeglądarki (2).