2014-12-23 23 views
8

İlkbahar 4.1, projem için hazırda bekletme 5.1.3 kullanıyorum. GroupSequence'ı son 2 gündür çalışmaya çalışıyorum. Doğrulama dokümanını, blogları ve stackoverflow'ta yayınlanan birkaç soruyu anladım.Bean doğrulama grubu dizisi çalışmıyor

Lütfen aşağıdaki sınıfa bakınız. Gruplandırma ve grupları ek açıklamalardan kaldırdığımda, tüm doğrulama mesajları bir araya gelir, yani isim ve diğer alanlardaki tüm kontroller bir araya getirilir. İsim alanı için söyleyelim - İlk önce doğrulamak için @NotBlank ve @Size istiyorum, daha sonra isim Kalıpla eşleşmeli ve en sonunda veritabanı çağrıları nedeniyle @UniqueName için kontrol edilmelidir.

Bunun için, dokümanlar ve yanıtlarda önerildiği gibi GroupSequence'ı oluşturdum. Ancak doğrulamalar tetiklendiğinde, yalnızca @NotBlank ve @Size adı için kovulur. Grup değerlerini kalan ek açıklamalardan kaldırdığımda, çalışmaya başlarlar, ancak tüm hata iletileri bir kerede gösterilmez.

First.class gruplarıyla belirtilen ek açıklamaların bir araya getirilmesini istiyorum. Gruplarla belirtilen doğrulamaların neden kovulmadığını anlamıyorum.

Lütfen birisi bana yol gösterebilir.


@GroupSequence({MyForm.class, OrderedChecks.class}) 
public class MyForm { 

    @NotBlank 
    @Size(min = 2, max = 40) 
    @Pattern(regexp = "^[\\p{Alnum} ]+$", groups = First.class) 
    @UniqueName(groups = Second.class)//Custom validation 
    private String name; 

    @NotBlank 
    @Size(min = 2, max = 40) 
    private String url; 

    @NotBlank 
    @Size(max = 100) 
    private String imagePath; 

    //Custom Validation 
    @CheckContent(acceptedType = <someString>, allowedSize=<someval>, dimensions=<someval> groups = Second.class) 
    private MultipartFile image 

... 
} 

@GroupSequence(value = {Default.class, First.class, Second.class}) 
public interface OrderedChecks {} 

@Controller 
@RequestMapping(value = "/myForm") 
public class MyFormController { 

    @RequestMapping(method = POST) 
    public String completeSignUp(@Valid @ModelAttribute("myForm") final MyForm myForm, 
          BindingResult result, RedirectAttributes redirectAttributes, Model model) { 

     if(result.hasErrors()) { 
      model.addAttribute(companyDetailsForm); 
      //ERROR_VIEW="myForm"; 
      return ERROR_VIEW; 
     } 
     // Doing something else. 
     return <success view>; 
    } 
} 
+0

Çözünürlükle ilgili herhangi bir fikri olan veya yanlış yaptığım bir şey var mı? – jay28

+0

Soruyu, doğrulama işleminin beklendiği gibi çalışmadığı bir kodla günceller misiniz (örneğin, denetleyici yöntemi)? – Khalid

+0

@Khalid denetleyici kodunu ekledi, çalışıyor ama beklediğim gibi değil. Çalışmak için bir hack kullanmam gerekecek, ki bu benim aklımda var ama bahar mvc'de hack'ime girmek yerine bir şey arıyordum. Bu çekleri özel notuma yerleştirmek zorunda kalacağım, ama bu durumda bile bir alan için hata mesajını değiştiremediğimi bilmiyorum, örneğin dört ek açıklamaya sahip olan isim, başarısız duruma bağlı olarak. Bir hata dosyasında hata mesajlarını tanımladım. – jay28

cevap

5

Kullanım Bahar en @Validated yerine @Valid. Bu, grubu belirlemenize ve diziyi kontrol etmenize olanak tanır. Eğer MyForm fasulye üstünde @GroupSequence({MyForm.class, OrderedChecks.class}) gerekmez

@RequestMapping(method = POST) 
public String completeSignUp(@Validated(OrderedChecks.class) @ModelAttribute("myForm") final MyForm myForm, 
         BindingResult result, RedirectAttributes redirectAttributes, Model model) { 
... 
} 

Not:

için denetleyici yöntemini değiştirme

.

+0

Denedim, ama son kez işe yaramadı. Tekrar deneyeceğim. – jay28

+0

önerildiği gibi, değişiklikleri yaptım ve çalışmıyor. Bir gruba ait doğrulamalar kovulmaz. – jay28

+0

Benim için çalışıyor. Değerin aslında '@ Pattern' ve '@ UniqueName' kısıtlamalarını tetikleyebileceğinden emin olun. Emin iseniz, Spring'in hata ayıklama günlüğünü açın ve herhangi bir ipucu arayın. – Khalid

İlgili konular