Spring Portlet Jquery Ajax发布到Controller

编辑:

startdate和enddate是POJO中的joda dateTime,我得到的错误是:

SystemOut O 14:10:16.040 [WebContainer : 2] DEBUG org.springframework.beans.BeanUtils - No property editor [org.joda.time.DateTimeEditor] found for type org.joda.time.DateTime according to 'Editor' suffix convention ... SystemOut O Error::Failed to convert property value of type 'java.lang.String' to required type 'org.joda.time.DateTime' for property 'startTimestamp'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.joda.time.DateTime] for property 'startTimestamp': no matching editors or conversion strategy found 

我也无法编辑Pojo并添加@DateTimeFormat,因为Pojos是从XSD生成的。 我也尝试添加一个customObjectMapper,但没有任何效果。 任何帮助将非常感激。

原始问题:

我正在尝试提交表单并将数据发送到Controller方法。 问题是ModelAttribute是空的,没有值。 Spring MVC Portlet + Jsp + Javascript + Jquery + Controller @ResourceMapping

片段:

JSP:

   
... ...

jQuery的:

 function addNew() { var dataObject = JSON.stringify({ 'startTime': $('#start_date').val(), 'endTime': $('#end_date').val(), 'description': $('#message').val(), 'active': $('#status').val() }); alert("data::"+dataObject); $.ajax({ url: "", type: 'POST', contentType: 'application/json', data: dataObject }).done(function(json){ alert("Success!"); //more logic }).fail(function() { alert("OOPS!"); }); } 

控制器:

  @ResourceMapping(value = "addNewURL") public void addNew(@ModelAttribute(value = "dataObject") Obj n, BindingResult bindingResult, ResourceRequest request, ResourceResponse response, ModelMap model) { if (!bindingResult.hasErrors()) { System.out.println("a:::"+n.getDescription()); } 

此getDescription为null。 另外如果我使用request.getParameter(“description”)也是null。 我错过了什么? 请帮忙

您根本不需要使用JSON数据。

首先,避免dataObject的字符串化:

 var dataObject = {...}; // no JSON.stringify call 

其次,删除contentType: 'application/json'因为在这种情况下没有意义。

如果dataObject是键/值对和默认的contentType ,则将正确构造POST请求。

要处理单击和提交事件,我建议使用jQuery单击并提交方法:

 $("#submit").click(function (event) { addNew(); event.preventDefault(); }); $("#submit").submit(function (event) { addNew(); event.preventDefault(); }); 

我为这个问题创造了一个小提琴 。

请参阅jQuery.ajax文档。