Spring MVC 3:CustomDateEditor工作但是有一个验证错误(BindingResult)

时间:2013-07-11 18:22:07

标签: spring-mvc spring-mvc-initbinders

当我在结果网页中提交一个空白日期的表单时,显示验证错误时出现问题:

Failed to convert property value of type java.lang.String to required type 
java.util.Date for property dateFin; nested exception is 
java.lang.IllegalArgumentException: Could not parse date: Unparseable date: ""

我的控制器看起来像这样:

    @Controller
    @SessionAttributes
    @Lazy
    public class MyController extends AbstractMVPAction {
        @RequestMapping(value = "/secured/cp/saveProgram")
        public String enregistrerProgramme(@ModelAttribute Program program,
                 BindingResult bindingResult, ModelMap model){
            if(bindingResult.hasErrors()){
                model.put("program", program);
                return "/secured/cp/showProgram"
            }else{
                // ... saves the programme
                model.put("program", null);
                return "/secured/cp/backToOtherPage"
            }
        }
        @InitBinder
        public void initBinder(WebDataBinder binder) {
            binder.registerCustomEditor(Date.class, new CustomDateEditor(
                    new SimpleDateFormat("dd/MM/yyyy"), false));
        }
    }

当我调试我的方法时,我可以看到我的对象很好,我做的modif报告很好,日期为null,但bindingResult.hasErrors()返回true,据我说它不应该。

我曾经在Program对象和@Valid注释中有一些验证注释,但是我将它们全部删除了,但仍然有问题。

我已经阅读了很多类似的问题,每次解决方案都是@ InitBinder / CustomDateEditor。 所以它就在那里,我猜它正在工作,日期以我想要的方式显示(在我添加它之前不是这种情况)并且我可以提交它们,前提是它不是空的。

提前感谢,我开始发疯了......

1 个答案:

答案 0 :(得分:3)

您构建了一个显式禁止空字符串的CustomDateEditor。检查Javadoc for the constructor you're using,当boolean参数为false时,将空字符串传递给该编辑器会导致您看到的IllegalArgumentException。

试试这个:

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(
                new SimpleDateFormat("dd/MM/yyyy"), false));
    }