Spring Portlet Jquery Ajax сообщение для контроллера
РЕДАКТИРОВАТЬ:
Начальная дата и конечная дата - это joda dateTime в POJO, и я получаю следующую ошибку:
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 + Контроллер @ResourceMapping
Snippet:
JSP:
<portlet:resourceURL id="addNewURL" var="addNewURL">
</portlet:resourceURL>
<form:form id="qmat_new_notification_form" action="#" method="POST" modelAttribute="dataObject">
...
<input type="text" class="date-picker" id="start_date">
...
<input type="submit" value="Save" class="button" onclick="addNew()">
</form:form>
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: "<%=addNewURL%>",
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 является нулевым. Также, если я использую request.getParameter("description"), также является нулевым. Что мне не хватает? Пожалуйста помоги
1 ответ
Вам вообще не нужно работать с данными 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.