Как мне вернуть представление из контроллера пружины, используя запрос ajax? - PullRequest
2 голосов
/ 11 августа 2011

Я делаю ajax-запрос, используя jquery, это вызывает следующий пружинный контроллер:

@RequestMapping(value = "/dialogController", method = RequestMethod.POST)
public String dialogController(Model model, @RequestBody MyClass myclass) {
  myClass.setTitle("SUCCESS");       
  model.addAttribute("myClass",myClass);
  return "dialogContent";  //this resolves to dialogContent.jsp
}

Однако я получаю следующую ошибку:

org.springframework.web.HttpRequestMethodNotSupportedException: 
Request method 'POST' not supported

И, если требуется, здесь есть ajaxвызов, который я делаю с использованием jQuery:

   jq.postJSON("/dialogController", myClass, function(data) {
      myDialog.html(data);
      myDialog.dialog('open'); 
      //dialog settings previously assigned, 
      //but the success callback function is not reached anyway
    });

EDIT Я получаю ту же ошибку, если использую:

jq.ajax({
  type: 'POST',
  url: "/dialogController",
  data:myClass,
  success:  function(data) {            
         previewDialog.html(data);
         previewDialog.dialog('open');
  });

1 Ответ

2 голосов
/ 15 августа 2011

Для зрителей дома ... Я обнаружил, что проблема была в том, что подпись метода, определенная в контроллере, не соответствует вызову ajax.Я удалил параметр Model model из метода контроллера.Я также тогда понял, что должен был также вернуть новую модель и представление;Вот рабочий код:

var myJSON  = {"title":"help"}; 
myJSON = JSON.stringify(myJSON);

<c:url var="postAndView" value="/PostJSONMAV" />
...
jQuery.ajax({
    type: 'POST',
    url: "${postAndView}",
    data:myJSON,
    contentType: "application/json",
    success:  function(data) {          
        previewDialog.html(data);
        previewDialog.dialog('open');
    }
});

Я перешел на вызов ajax, но jQuery.postJSON(), вероятно, будет работать также.Ниже показан код нового контроллера, который корректно добавляет новый объект в модель и возвращает страницу jsp, которая открывается в диалоговом окне:

@RequestMapping(value = "/PostJSONMAV", method = RequestMethod.POST)
public  ModelAndView postJSON(@RequestBody MyClass myClass) {
    ModelAndView mav = new ModelAndView();
    myClass.setTitle("SUCCESS");
    mav.setViewName("dialogContent");
    mav.addObject("myClass", myClass);
    return mav;     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...