İ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>;
}
}
Çözünürlükle ilgili herhangi bir fikri olan veya yanlış yaptığım bir şey var mı? – jay28
Soruyu, doğrulama işleminin beklendiği gibi çalışmadığı bir kodla günceller misiniz (örneğin, denetleyici yöntemi)? – Khalid
@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