Spring MVC 3.0中的自定义验证 - 将@Model传递给Validator

时间:2012-10-15 19:15:44

标签: spring spring-mvc

我正在尝试在Spring MVC应用程序中编写自定义验证器。我想知道是否有办法将@Model对象传递给自定义弹簧验证器?

说,我有一个Person对象和Account对象。我必须编写一个自定义验证器来验证Person,但验证依赖于Account对象和会话中的其他对象。

例如,Person不能超过3个帐户,帐户类型必须属于特定类别且不超过3年(此值,即根据登录的并且处于会话中的配置文件,年数是动态的)。

如何将两个对象,尤其是@Model传递给验证器。

public class ServiceValidator implements Validator {

@Autowired
private ServiceDAO servicesDao;

@Override
public boolean supports(Class<?> clasz) {
    return clasz.isAssignableFrom(Person.class);
}

@Override
public void validate(Object obj, Errors errors) {
     Person subscriber = (Person) obj;
    // How can I access @Model object here ???

}

1 个答案:

答案 0 :(得分:1)

怀疑是否可以有两种解决方法:

a。如果它是您要查找的持久数据,可能最好再次在验证程序中检索它并使用该数据进行验证,因此,例如,在您的情况下,您正在验证人员和人员帐户详细信息可从数据库中检索,然后从数据库中获取并使用检索到的数据在验证程序中进行验证。

b。如果你需要使用验证器的地方数量相当受限,这可能是一个更好的方法:

public class ServiceValidator {

@Autowired
private ServiceDAO servicesDao;

public void validate(Person subscriber, List<Account> accounts, ..., Errors errors) {


}

直接从请求映射的方法调用上面的验证器..

在您的控制器中..

List<Account> accounts = //retrieve from session
serviceValidator.validate(subscriber, accounts, ...errors);
if (errors.hasErrors())..
else..