Как отправить атрибут модели в AJAX без использования тега формы в Spring MVC - PullRequest
0 голосов
/ 18 октября 2019

Я попытался сделать пост-запрос 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);
       }
});
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...