2011-03-07 37 views
11

Bu soru bir yerlerden önce ele alınmış olsaydı özür dilerim. Eğer bana lütfen bağlantı verdiyse, henüz tatmin edici bir cevap bulamadım.javax doğrulama hata mesajı yapma daha spesifik

Javax doğrulaması tarafından sağlanan hata iletilerinin daha spesifik olması için bir yol bulmaya çalışıyorum.

benim @Min ek açıklaması için şu anda var mesajı ValidationMessages.properties dosyasında belirtilir:

javax.validation.constraints.Min.message=The value of this variable must be less than {value}. 

ve bu beklenir gibi dışarı yazdırır

The value of this variable must be less than 1 

İsterim Ne iletide ayrıca, başarısız olan değişkenin değerinin yanı sıra doğrulama başarısız olan değişken (ve sınıf) adını da içerir. Daha çok gibi.

The value of class.variable was 0 but not must be less than 1 

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

Klee

cevap

13

dosyası oluşturma içerecektir. Can sıkıcı! Gördüğüm kadarıyla sen 3 seçenek vardır:

  1. Bir özel MessageInterpolator yazmak ve doğrulama yapılandırması içine yerine olabilir, ama bu gerçekten kırılgan görünüyor bu.

  2. Sen in-the-tarzı @Min ( see how to do a custom validator here) kendi özel ek açıklama olduğuna dair karar
  3. ...

  4. .. Ama ihtiyacın bilgiler aslında çıkar ConstraintViolation nesne içinde tutulur Doğrulayıcı örneği. Sadece varsayılan mesaja girmez.

Şu anda bir formu doğrulamak için bir çeşit web çerçevesi kullanıyorsunuzdur. Bu durumda, doğrulama geçersiz kılmak ve bu gibi bir şey yapmak oldukça basit olmalıdır (hızlı hacky sürümü, bu bir dış özellikler dosyası kullanarak bu çok düzenli hale getirebilmeniz gerekir):

 
    Set<ConstraintViolation<MyForm>> violations = validator.validate(form); 
    for (ConstraintViolation<MyForm> cv : violations) { 
    Class<?> annoClass = cv.getConstraintDescriptor().getAnnotation().getClass(); 
    if (Min.class.isAssignableFrom(annoClass)) { 
     String errMsg = MessageFormat.format(
     "The value of {0}.{1} was: {2} but must not be less than {3}", 
     cv.getRootBeanClass(), 
     cv.getPropertyPath().toString(), 
     cv.getInvalidValue(), 
     cv.getConstraintDescriptor().getAttributes().get("value")); 
      // Put errMsg back into the form as an error 
    } 
    } 
1

Ben özel bir kısıtlama oluşturmak gerekir inanıyoruz.
Kullandığınız teknik özelliklerin hangi uygulamasından söz ettiniz, ancak Hazırda Bekletme Aracı here için özel bir kısıtlama oluşturma konusunda iyi belgeler var. sürecin

Bölüm Kendi ValidationMessages.properties Hmmm

İlgili konular