我有一个dataBind,它具有很少的属性以及bean列表,而bean的一个属性是Date类型。现在我想将customDateEditor添加到此日期字段中 我的Databind是这样的:
public class myDataBind{
/*
some attributes here
*/
List myList = new ArrayList(); // List of myBean
/*
accessor and mutators here
*/
}
public class myBean{
/*
some attributes here
*/
private Date fromDate = null;
private Date toDate = null;
/*
accessor and mutators here
*/
}
在我的控制器中我有
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
super.initBinder(request, binder);
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"){{ setLenient(false);}},false)); // Date.class is java.sql.Date.class
}
但我仍然得到错误 字段'myList [0] .fromDate'中对象'command'中的字段错误:被拒绝的值[2009-05-27];代码[typeMismatch.command.myList [0]。fromDate,typeMismatch.command.myList.fromDate,typeMismatch.myList [0] .fromDate,typeMismatch.myList.fromDate,typeMismatch.fromDate,typeMismatch.java.sql.Date,typeMismatch] ; arguments [org.springframework.context.support.DefaultMessageSourceResolvable:codes [command.myList [0] .fromDate,myList [0] .fromDate];参数[];默认消息[myList [0] .fromDate]];默认消息[无法将类型[java.lang.String]的属性值转换为属性'myList [0] .fromDate'的必需类型[java.sql.Date];嵌套异常是java.lang.IllegalArgumentException:无法将类型[java.lang.String]的值转换为属性'fromDate'的必需类型[java.sql.Date]:找不到匹配的编辑器或转换策略] 的
请告诉我,我错过了哪一步。
答案 0 :(得分:0)
我不是百分百肯定,但是:你需要调用super.initBinder(request,binder)吗?
答案 1 :(得分:0)
我使用Spring的验证框架已经有一段时间了。通过查看您提供的代码和详细信息,我没有发现任何差异。我在查看代码时注意到的唯一区别是我首先创建了CustomDateEditor,使用binder注册了它,然后调用了super.initBinder。
只是出于好奇,你有没有试过这样的事情
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"){{ setLenient(false);}},false));
super.initBinder(request, binder);
}
答案 2 :(得分:0)
在错误中它提到'java.sql.Date' - 在你的自定义属性编辑器和bean类中都是引用java.sql.Date或java.util.Date的Date类?
即。你有没有在所有地方导入预定的Date类?
答案 3 :(得分:0)
CustomDateEditor
只能用于java.util.Date
!
这在课程documentation中有记录。