如何在数据绑定之后但在验证之前在Spring MVC 3中设置一个值?

时间:2011-08-11 19:26:08

标签: spring data-binding spring-mvc

我需要在我的一个域对象上设置“提交时间”字段。验证规则要求该属性存在,但我不能通过表单中的数据绑定来设置它,因为用户可以更改它。如何在验证发生之前设置绑定对象(或即将绑定的对象)的属性?

2 个答案:

答案 0 :(得分:1)

我不知道我是否正确理解了您的问题,但是您可以使用客户验证器在服务器端使用Java脚本在客户端操作数据,有两种选择。

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) {
        Person p = (Person) obj;
        p.setanyValue(some value); //changing object value
        if (p.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        } else if (p.getAge() > 110) {
            e.rejectValue("age", "too.darn.old");
        }
    }
}

希望它有所帮助。

答案 1 :(得分:0)

也许是东西

我相信绑定首先要创建一个类的新实例。假设这是真的,您可以在构造函数中添加blah = new Date();。虽然这会在绑定之前发生,但我相信它满足获取提交时间的核心要求,但不要让客户编辑它。

如果这是错误的,请查看InitializingBean接口(或相应的init-method bean属性)。

看起来spring 3.0有更多生命周期选项。在Spring 3.0 Reference中查看 3.6.1.4组合生命周期机制部分。

更好的信息

您应该能够注册一个处理程序拦截器并在其中设置提交时间。

查看Spring 3.0参考中的 15.4.1拦截请求 - HandlerInterceptor接口部分(链接在上面)。