带有Spring MVC的jQuery datepicker – 将日期从视图传递到控制器会发送null

提交表单后,我看到所有值都正确传递给控制器​​,除了传递为null的日期(表单中的日期选择在输入字段中输入正确的日期)我尝试添加,但它没有帮助。 我也尝试删除“路径”并将其替换为“”中的“name”,但它会抛出错误,说“路径”属性丢失。 我试过以下但没有运气 –
1. 在Spring中,从jsp页面上的日期选择器读取后,mvc应用程序日期值在控制器中被接收为NULL
2. http://blog.teamextension.com/date-binding-in-spring-mvc-1321

jQuery: $(document).ready(function() { $("#datepicker").datepicker({dateFormat:"yy-mm-dd"}); });

JSP:

 
Due Date:

模型:

 @Column(name = "DUE_DATE") @DateTimeFormat(pattern = "yyyy/mm/dd") private Date dueDate; 

控制器:

 @RequestMapping(value="/lock", method = RequestMethod.POST) public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map map, HttpServletRequest request) { try { /*.......CODE.........*/ adminTransactionDO.setDueDate(adminTransaction.getDueDate()); /*.......CODE.........*/ } return new Status("success", "Transaction inserted Successfully !"); } catch (Exception e) { return new Status("error", e.toString()); } } 

它看起来像你的:

 @Column(name = "DUE_DATE") @DateTimeFormat(pattern = "yyyy/mm/dd") private Date dueDate; 

是问题。 Spring无法将其转换为Date。

相反,试试

  private String dueDate; 

我通过将RequestParam中的日期传递给控制器​​来解决了这个问题:

 public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map map, HttpServletRequest request, @RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date dueDate) { try { /*.......CODE.........*/ SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); Date date = dt1.parse(dt1.format(dueDate)); adminTransactionDO.setDueDate(date); /*.......CODE.........*/ } return new Status("success", "Transaction inserted Successfully !"); } catch (Exception e) { return new Status("error", e.toString()); } } 

你可以试试这个

 
Due Date:

在你的javascript使用中

 var date = document.getElementbyId("datepicker").value; 

如果你想将日期发送到servlet,请执行以下操作…

    

在你的servlet post方法….

 String date = request.getParameter("InputDate"); 

您可以定义一个临时实体字段,用于以String格式保存日期(Transient是不参与持久性的字段,它们的值永远不会存储在数据库中)。 然后将此字段映射到视图中表单的输入字段的path属性。 使用控制器中的SimpleDateFormat实用程序,您可以将日期字符串值转换为要存储到数据库中的实际日期格式。

MODAL

 @Column(name = "DUE_DATE") @DateTimeFormat(pattern = "yyyy/mm/dd") private Date dueDate; @Transient private String dueDateString; //Your getters, setters and the rest 

JSP

 

CONTROLLER

 @RequestMapping(value="/lock", method = RequestMethod.POST) public @ResponseBody Status lockDevice(@ModelAttribute("adminTransaction") @Validated AdminTransaction adminTransaction, BindingResult result, Model model, Locale locale,Map map, HttpServletRequest request) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); try { Date dueDateVal; dueDateVal = dateFormat.parse(adminTransaction.getDueDateString()); adminTransaction.setDueDate(dueDateVal); } catch (ParseException e) { e.printStackTrace(); } try { /*.......CODE.........*/ adminTransactionDO.setDueDate(adminTransaction.getDueDate()); /*.......CODE.........*/ } return new Status("success", "Transaction inserted Successfully !"); } catch (Exception e) { return new Status("error", e.toString()); } }