2011-08-16 7 views
13

Web uygulamamda form doğrulaması için Hazırda Bekleme onaylayıcısını kullanıyorum. aşağıdaki gibi benim dize özniteliği için @Length ek açıklama kullanıyorum:Hazırda Bekletme Validator - @Length - Dakika ve maks için ayrı mesaj nasıl belirlenir?

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

Ancak, Dize 50 karakterden uzunsa farklı bir mesaj görüntülemek için bir ihtiyaç vardır. Bunu yapmak için kutudan çıkmış @Length doğrulayıcıyı kullanmanın bir yolu var mı? aşağıdaki gibi yapmak istiyorum ne bir örneği (derleyici bana izin vermiyor) 'dir:

@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; 

Ben @Max ve @Min çalıştık ve onlar ne istiyorum yapmazlar. Herhangi bir girdi büyük ölçüde takdir edilecektir!

cevap

36

"alanı 5 ila 50 karakter uzunluğunda olmalıdır" mesajınızı değiştirmek Bunun gibi:

@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. Taşınabilirlik nedeniyle @Length üzerinden Bean Validation API tarafından tanımlanan @Size'u tercih etmenizi tavsiye ederim.

+0

Bu tam olarak aradığım şey! – javagruffian

+0

Bean Validation 2.0/Hazırda Bekleme Validator 6 gibi, '@ List 'açıklamasına ihtiyaç duymadan' @ Length' ve diğer herhangi bir kısıtlamayı birden fazla kez belirtebileceğinizi unutmayın. – Gunnar

7

Belgelere göre, bir iletiyle @Length(min=, max=) kullanabilirsiniz. Sonra sadece (Bean Doğrulama/hazırda Doğrulayıcı'ya her kısıt tipi için tanımlanır) iç list annotation kullanarak tek bir eleman birkaç @Length kısıtlamaları belirtebilirsiniz

+0

Evet, bu çözümü seviyorum ama maalesef ayrı mesajlarla uygulanması gereken bir zorunluluk var. – javagruffian

+2

Hem Min hem de Maks, hem de her biri için ayrı iletileri olan özel bir kısıtlama oluşturabilirsiniz: http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-customconstraints.html – atrain

6

java standart javax.validation.constraint.Size kullanırsanız, aynı şeyi bu şekilde elde edebilirsiniz:

@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; 

Bildirimi ileti interpolasyon kullanarak saha boyutunu hardcoding önleyebilirsiniz.

İlgili konular