2011-08-16 8 views
13

Używam walidatora Hibernacja do sprawdzania formularza w mojej aplikacji internetowej. Używam @Length adnotacji do mojego atrybutu String następująco:Walidator Hibernacji - @ Długość - Jak określić oddzielną wiadomość dla min. I maks.?

@Length(min = 5, message = "The field must be at least 5 characters") 
private String myString; 

Jednak mam potrzebę, aby wyświetlić inny komunikat, jeśli ciąg przekracza 50 znaków. Czy istnieje sposób, aby użyć gotowego walidatora @Length? Przykładem tego, co chciałbym zrobić (kompilator nie pozwoli mnie) jest następujący:

@Length(min = 5, message = "The field must be at least 5 characters") 
@Length(max = 50, message = "The field must be less than 50 characters") 
private String myString; 

Próbowałem @Max i @Min i nie robią tego, co chcę. Wszelkie dane wejściowe będą bardzo mile widziane!

Odpowiedz

36

Można określić kilka @Length ograniczeń w jeden element za pomocą wewnętrznej list annotation (który jest określony dla każdego rodzaju wymuszenie w Bean Validation/Hibernate Validator) tak:

@List({ 
    @Length(min = 5, message = "The field must be at least 5 characters"), 
    @Length(max = 50, message = "The field must be less than 50 characters") 
}) 
private String myString; 

Btw. Zalecam, aby preferować @Size zgodnie z definicją API Bean Validation powyżej @Length ze względu na przenośność.

+0

To jest dokładnie to, czego szukałem! – javagruffian

+0

Zauważ, że od wersji 2.0 sprawdzania poprawności Bean/Hibernate Validator 6 możesz wielokrotnie określać "@ Length" i inne ograniczenia, bez potrzeby stosowania jawnej adnotacji "@ List". – Gunnar

7

Zgodnie z dokumentacją można użyć @Length(min=, max=), z jedną wiadomością. Następnie wystarczy zmienić swój komunikat do „Pole musi mieć od 5 do 50 znaków”

+0

Tak, podoba mi się to rozwiązanie, ale niestety mam wymóg, który musi zostać wdrożony z oddzielnymi komunikatami. – javagruffian

+2

Można utworzyć niestandardowe ograniczenie, które będzie sprawdzać zarówno Min i Max, jak i osobne komunikaty dla każdego: http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html – atrain

6

Jeśli używasz standardowego java javax.validation.constraint.Size, można osiągnąć to samo w ten sposób:

@Size.List ({ 
    @Size(min=8, message="The field must be at least {min} characters"), 
    @Size(max=60, message="The field must be less than {max} characters") 
}) 
private String myString; 

zauważyć, że można uniknąć hardcoding rozmiar pola za pomocą interpolacji wiadomość.

Powiązane problemy