Я попытался сделать пост-запрос ajax, он работает, но значение @ModelAttribute у Spring mvc пустое. Но оно должно совпадать с полем с идентификатором "searchString". Я использовал отладку, и это показывает, что я получил пустую строку из запроса AJAX. Что я делаю не так?
Мой фрагмент jsp
<div class = "search">
<input type = "text" id="searchString" name="searchString" modelAttribute="searchString">
<input type = "button" value = "Search" onclick = "sendAjaxJson();">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" id = "csrf" />
</div>
Мои методы контроллера
@GetMapping("/ajaxtest")
public String ajaxPage(Model model, @ModelAttribute("searchString") String searchString){
model.addAttribute("searchString",searchString);
return "test/ajax";
}
@PostMapping(value = "/ajaxprocessform", produces={"application/json; charset=UTF-8"})
@ResponseBody
public String processAjaxPage(Model model, @ModelAttribute("searchString") String searchString) {
List<Teacher> slistItems = teacherService.findByParam(searchString);
slistItems.forEach(t -> t.setGroups(new ArrayList<>()));
return new Gson().toJson(slistItems);
}
Функция JavaScript Ajax:
function sendAjaxJson() {
var csrf = document.getElementById('csrf').value; //${"#csrf"}.val();
alert(csrf);
var searchString = document.getElementById('searchString').value;
alert(searchString);
$.ajax({
url : '../ajaxprocessform',
type : 'POST',
dataType:'text',
data : {text: searchString} ,
headers: {
'X-CSRF-Token' : csrf }
,
processData: false,
contentType: false,
success : function(data) {
console.log(data);
alert(data);
}
});
}