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