2011-04-29 136 views
0

我們在我們的web應用程序中使用Spring MVC 3.0。我們也在使用Spring MVC的驗證框架。在Spring MVC中驗證

在進行驗證時,我們需要爲我們需要驗證的每個實體創建驗證器。例如,如果我有一個Person實體,我將使用下面的PersonValidator來驗證它。

public class PersonValidator implements Validator { 
/** 
* This Validator validates just Person instances 
*/ 
public boolean supports(Class clazz) { 
    return Person.class.equals(clazz); 
} 

public void validate(Object obj, Errors e) { 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "field.required"); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname", "field.required"); 
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "age", "field.required"); 
} 
} 

我的問題是,是否有可能對不同方法的相同實體有不同的驗證。

@RequestMapping(method = RequestMethod.POST) 
public String add(@Valid Person person, BindingResult result) { 
    if (result.hasErrors()) { 
     return "person/new"; 
    } 
    personService.addPerson(person); 
    return "redirect:/persons"; 
} 

@RequestMapping(method = RequestMethod.POST) 
public String update(@Valid Person person, BindingResult result) { 
    if (result.hasErrors()) { 
     return "person/edit"; 
    } 
    personService.updatePerson(person); 
    return "redirect:/persons"; 
} 

我想驗證名字,姓氏和年齡,同時添加一個新的人,但在更新時我不希望年齡是強制性的。

這只是一個隨機的情況,它可以是任何實體和任何屬性。

我們該如何處理這種情況?

謝謝。

+0

以前沒有人做過這個嗎?有任何想法嗎 ? – ashishjmeshram 2011-04-29 13:56:37

回答

0

您可以刪除@Valid註釋,而是在模型對象中爲插入vs更新設置一個標誌,然後直接調用驗證器(可以將它們注入到控制器中)。

然後在驗證器中,您可以選擇當前場景所需的驗證。