2012-02-29 12 views
7

Mam sport o nazwie POJO o właściwościach sportID, nazwa sportowa, liczba graczy. Używając opatrzonego adnotacjami sprawdzania poprawności, napisałem własne ograniczenie do adnotacji, aby sprawdzić, czy sportName istnieje już w bazie danych. Działa bardzo dobrze, gdy próbuje się dodać sportName, jednak jeśli spróbuję zaktualizować odtwarzacze bez zmiany nazwy sportName, to również walidacja nie powiedzie się.Sprawdzanie adnotacji wiosennych - sprawdź unikat w aktualizacji a dodaj

Czy istnieje jakiś sposób przekazania parametru w adnotacji sprawdzania poprawności? Na przykład chciałbym przekazać insportID do testu sprawdzania sportName, aby wykluczyć ten identyfikator w zapytaniu db.

A może jest lepszy sposób na zrobienie tego? Czy w moim kontrolerze powinienem zezwolić Springowi na weryfikację danych wejściowych (przy pomocy @Valid), a jeśli nie ma błędów, wywołać funkcję sprawdzania poprawności w celu sprawdzenia reguł biznesowych?

Odpowiedz

3

Lepszym sposobem byłoby użycie grup walidacyjnych. (Spring MVC and JSR-303 Validation Groups)

Następnie można mieć domyślną grupę sprawdzania poprawności bez "braku wyjść". I poproś o dodatkową grupę z "nieważnym weryfikatorem". Umożliwiłoby to wyzwolenie "nie kończącego się walidatora" tylko wtedy, gdy jest to potrzebne. (Niestety nie jest to obsługiwane bezpośrednio na wiosnę 3.0, tam trzeba rozpocząć walidację "ręcznie")

Innym sposobem nie byłoby zaimplementowanie walidatora jak walidatora pól, ale bardziej jak walidator klasy. - Zapoznaj się z różnymi rozwiązaniami omawianymi dla sprawdzania poprawności w wielu polach in this Stack Overflow Question. Da ci to pomysł, jak uzyskać dostęp do pola id.

+0

Użyłem tego linku, który mi wysłałeś i zadziałało. Czytałem to wczoraj, ale nie mogłem wymyślić, jak przekazać int, ale zrozumiałem, kiedy go implementowałem, że szuka String nazwy pola i kod BeanUtils.getProperty jest tym, co faktycznie dostaje wartość, która Mogę wtedy rzucić jako Integer. – Felix

Powiązane problemy