0

我正在使用spring mvc。在控制器中,我想将参数作为 java Bean Order 获取。order bean 有几个参数,其中之一是dueDate (java.util.Date)。

@RequestMapping("/toAddOrder")
public ModelAndView addOrder(Order order, BindingResult bindingResult){
    return new ModelAndView("redirect:toViewOrder");
}

@InitBinder
protected void initBinder(
        WebDataBinder binder) throws ServletException {
   binder.registerCustomEditor(byte[].class,
            new ByteArrayMultipartFileEditor());

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            dateFormat.setLenient(false);
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}

问题是如果我在将表单提交给控制器之前没有设置到期日期的值。然后会遇到错误。BAD_REQUEST,因为dueDate 为空或“”。

所以,我想知道,如何避免这个问题?我能找到的解决方案如下。1.提交表单前js检查。2.不绑定为Order,从HttpServletRequest请求中获取参数

我为最后 2 个解决方案发现的额外问题。如果 Order Bean 的参数太多,那么我需要编写很长的代码来获取和设置值,这可能会增加我的负担。

4

1 回答 1

0

我已经解决了这个问题。因为我是 Spring MVC 的新手。我尝试了几种方法。但我认为如果您遇到同样的问题,遵循方法可能会有所帮助。

添加你的控制器

@InitBinder
protected void initBinder( WebDataBinder binder) throws ServletException {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            dateFormat.setLenient(false);
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}

但我遇到了新问题。

如果我以“”值提交表单。我总是得到 error.code typeMismatch

我已经在message.properties文件中进行了配置

#bean level error message
typeMismatch.order.dueDate = order.dueDate format not match "YYYY-MM-DD"

#global type not match message
typeMismatch = data type not match

但是当我在页面头部打印错误消息时,我总是得到代码typeMismatch而不是typeMismatch.order.dueDate

<#if error?has_content>
    <#list error.allErrors as item>
       <@spring.message "${item.code?if_exists}"/><br/>
    </#list>
</#if>

任何人都知道如何解决这个问题?

于 2013-07-12T13:16:38.817 回答