Grails - walidacja danych
Pisząc aplikacje niejednokrotnie spotykacie się z koniecznością sprawdzania poprawności wprowadzonych danych, dane te weryfikowane są pod względem długości, zgodności z wzorcem lub wartością w innym polu, czy też samego sprawdzenia czy zostały wprowadzone.
Nie powinien więc Was dziwić fakt, że i Grailsy posiadają obsługę walidacji danych, a jaka jest to obsługa dowiecie się w tym wpisie
Walidacja w Grailsach jest definiowana per klasa modelu, oznacza to w praktyce, że Wasza walidacja musi zostać zdefiniowana w klasach modelu, a dokładniej za pomocą statycznego pola o nazwie constraints.
Na początek zdefiniujmy walidację dla pól w aplikacji zapisującej notki, która była przedstawiona w jednym z poprzednich przykładów:
Jak widać w powyższym przykładzie, dodanie walidacji pól jest sprawą stosunkowo prostą.
Efekt dodania walidacji sprawdzamy poprzez uruchomienie aplikacji i przejście do ekranu dodania nowej notki, uruchamiamy więc aplikację (komenda grails run-app) i przechodzimy do strony pod domyślnym adresem http://localhost:8080/notes/note/create, a następnie klikamy na przycisk “Create”.
Waszym oczom powinna się ukazać następująca strona:

Oczywiście walidator sprawdzający czy wpisano wartość w określone pole to nie jest jedynym dostępnym walidatorem, w dokumentacji do Grailsów można znaleźć o wiele więcej gotowych walidatorów, w tym:
- numeru karty kredytowej
- emaila
- zgodności z wzorcem
- sprawdzający długość wpisanej wartości
- i wiele, wiele innych…
Dostępność licznych walidatorów nie oznacza oczywiście, że nie możemy tworzyć swoich własnych, poniżej przedstawiam sposób jak sprawdzić wprowadzone dane za pomocą własnego kodu walidującego:
Różnica między powyższym kodem a przedstawionym wcześniej, polega na dodaniu dodatkowej walidacji pola title. Niestandardowy walidator który wprowadziłem został zaimplementowany przy pomocy domknięć (closures). Zmienna it zawiera wartość pola title, ponieważ chciałem aby wszystkie notatki miały od chwili obecnej tytuł zaczynający się od ciągu znaków “Notatka”, stąd też wykorzystałem metodę klasy String o nazwie startsWith, która to sprawdza czy wartość przypisana do zmiennej typu String zaczyna się od podanego w argumencie ciągu znaków.
Dobra, teraz czas sprawdzić czy nasz walidator działa, uruchamiamy ponownie aplikację i wprowadzamy nieprawidłowe dane:

I proszę, efekt zgodny z oczekiwaniami, tytuł notatki nie zaczyna się od ciągu znaków “Notatka” i dlatego też nie możemy zapisać danych. Zmienimy teraz tytuł na “Notatka pierwsza”:

Notatka została utworzona! Walidator działa!
Na koniec dla tych którzy zaspali prawie cały zeszły tydzień. SpringSource czyli firma stojąca za znanym wszystkim frameworkiem Spring kupiła G2One, firmę świadczącą usługi konsultingowe związane z Groovym i Grails. Więcej informacji na ten temat znajdziecie tutaj. Oj będzie się działo!











Czy ja tu już raz nie pisałem komentarza?
To coś obsługuje walidację na poziomie JavaScriptu czy servera? czy może obie?
Pozdrawiam,
Tomasz Bartczak
Racjonalny Developer
Hej,
chyba przez pomyłkę musiałem wykasować Twój poprzedni post (robiłem małe porządki).
Co do walidacji to niestety przedstawiona powyżej polega na sprawdzaniu danych po stronie serwera.
Sprawdzanie danych po stronie klienta musisz zaimplementować sam
Możesz też spróbować walidować dane za pomocą taga remoteField, służy on do przesyłania wartości określonego pola do serwera (powoduje to mniejsze wykorzystanie zasobów).