Spring ModelAndView не работает с вызовом ajax

Ajax вызывает контроллер Spring employee_edit, но ModelAndView не работает. Он не перенаправляет на страницу jsp с объектом. Я хочу перенаправить на страницу employee_registration.jsp с объектом employee. Код не содержит ошибок.

Аякс

 $('#example1 tbody').on( 'click', 'button1', function () {
                var eid = table.row( $(this).parents('tr') ).data().eid;
                $.ajax({
                    type:"GET",
                    url:"employee_edit?eid="+eid
                }); 

Контроллер

@RequestMapping(value="/employee_edit", method=RequestMethod.GET)
public ModelAndView RegitrationEdit(@RequestParam("eid") long eid)
{           
  Employee employee=employeeService.getEmployee(eid);
  ModelAndView mv=new ModelAndView(); 
  mv.setViewName("employee/employee_registration");
  mv.addObject("employee",employee);
  return mv;
}

После запуска кода он не показывает никаких ошибок. Прохожу код ModelAndView("employee/employee_registration","employee",employee); но ничего не происходит. Заранее спасибо.


person Brahma Dutt Sudhakaran    schedule 07.12.2017    source источник
comment
"employee/employee_registration" страница находится в resources/templates/employee/employee_registration.jsp верно? Кстати, вы используете spring-boot или просто spring с пользовательскими конфигурациями?   -  person varren    schedule 07.12.2017
comment
@varren Спасибо за ваш ответ. Путь к странице и все в порядке. Он работает на контроллере @RequestMapping("/employee") public String Employee() { return "employee/employee_registration"; } и использует Spring MVC, а не Spring Boot.   -  person Brahma Dutt Sudhakaran    schedule 07.12.2017


Ответы (2)


Я думаю, что в вашем вызове ajax вам нужно добавить параметр успеха. Вы можете просто изменить свой вызов как

 $.ajax({
            type:"GET",
            url:"employee_edit",
            data:{"eid":eid},
            success:function(data){
            }
       });

или вы также можете добавить только параметр успеха в свой код

$.ajax({
            type:"GET",
            url:"employee_edit?eid="+eid
            success:function(data) { }
       });

Но я предпочитаю первое. Это более ясно.

Это должно завершить вызов ajax, и ваша программа должна работать.

person rishon1313    schedule 08.12.2017

При вызове из ajax ModelAndView работать не будет. Вам нужно вернуть объект сотрудника как json, пометив возвращаемый тип аннотацией @ResponseBody

@RequestMapping(value="/employee_edit", method=RequestMethod.GET)
public @ResponseBody Employee RegitrationEdit(@RequestParam("eid") long eid)
{           
  Employee employee=employeeService.getEmployee(eid);    
  return employee;
}

После этого при успешном вызове вы получите ответ внутри обратного вызова успеха.

$.ajax({
    type:"GET",
    url:"employee_edit?eid="+eid,
    success: function(data) {
        //here data is the employee object
        //process it here and redirect using window.location
    }
}); 
person Monzurul Haque Shimul    schedule 08.12.2017