【问题标题】:How to bind CustomDateEditor to all Date fields in Springframework?如何将 CustomDateEditor 绑定到 Springframework 中的所有日期字段?
【发布时间】:2009-12-10 12:05:37
【问题描述】:

我有一个 dataBind,它有几个属性以及一个 bean 列表,并且 bean 的属性之一是 Date 类型。现在我想将 customDateEditor 添加到此日期字段。
我的数据绑定是这样的:

    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] ;参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [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]:找不到匹配的编辑器或转换策略]强>

请告诉我,我缺少哪一步。

【问题讨论】:

    标签: java spring


    【解决方案1】:

    我不是 100% 确定,但是:你需要调用 super.initBinder(request, binder) 吗?

    【讨论】:

      【解决方案2】:

      自从我使用 Spring 的验证框架以来已经有一段时间了。通过查看您的代码和您提供的详细信息,我没有发现任何差异。在查看我的代码时,我注意到的唯一区别是我首先创建了 CustomDateEditor,将其注册到活页夹,然后调用了 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);
      }
      

      【讨论】:

        【解决方案3】:

        在错误中提到“java.sql.Date” - 在您的自定义属性编辑器和您的 bean 类中是引用 java.sql.Date 或 java.util.Date 的 Date 类?

        即您是否在所有地方都导入了预期的 Date 类?

        【讨论】:

          【解决方案4】:

          CustomDateEditor只能用于java.util.Date

          这在课程的documentation 中有记录。

          【讨论】:

            猜你喜欢
            • 2021-07-04
            • 2016-02-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-19
            相关资源
            最近更新 更多