Spring MVC и прототип JavaScript - PullRequest
0 голосов
/ 26 июня 2009

Я пытаюсь вызвать контроллер Spring MVC с помощью вызова ajax из метода JavaScript. Метод javascript использует библиотеку Prototype для выполнения вызова ajax. Контроллер выбрасывает JSP в качестве вывода. Я могу поразить контроллер, как я вижу в сообщениях журнала, однако ответ, кажется, теряется. В чем может быть проблема. Вот код ....

 
   <br>
       function submitNewAjxCall() {<br>
       alert('test');<br>
           new Ajax.Request('SimpleApp/home.htm',<br>
                             {<br>
                               method:'post',<br>
                               parameters: $('formId').serialize(true),<br>
                               onComplete: showresult<br>
                             });<br>
        }<br>

        function showresult(resultdata) {<br>
        alert(resultdata.responseText); ****//this method is not called.....****<br>
        }<br>
   <br><br>

home.htm указывает на этот контроллер

public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        System.out.println("HomeController : " + ++i);
        return new ModelAndView("home");
    } --- this throws home.jsp

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 26 июня 2009

Проверьте с помощью Firebug (вкладка «Сеть»), получили ли вы ответ Ajax, и посмотрите его содержимое. Возможно, имеет смысл не возвращать всю HTML-страницу, а специфичный для JavaScript объект JSON, который рассказывает о том, что только что сделал контроллер. Возможно, добавьте свойство ajax GET в свой контроллер, где вы просто выводите простой JSON в тело ответа вместо возврата ModelAndView. Попробуйте использовать onSucess в Prototype. Может быть, это может сработать тогда

function submitNewAjxCall()
{
 new Ajax.Request('SimpleApp/home.htm?ajax=true',
 {
  method: 'post',
  parameters: $('formId').serialize(true),
  onComplete: function(transport)
  {
   alert(transport.responseText);
  }
 });
}

Редактировать: Чтобы написать JSON напрямую (например, используя Flexjson в качестве сериализатора), вы можете использовать его в (аннотированном) Spring-контроллере:

 @RequestMapping(value = "/dosomething.do", method = RequestMethod.GET, params = "ajax=true")
 public void getByName(
   @RequestParam(value = "name", required = true) String name,
   HttpServletResponse response
   )
 {
  response.setContentType("application/json");
  try
  {
   OutputStreamWriter os = new OutputStreamWriter(response.getOutputStream());
   List<DomainObjects> result = this.domainObjectService.getByName(name);
   String data = new JSONSerializer().serialize(result);
   os.write(data);
   os.flush();
   os.close();
  } catch (IOException e)
  {
   log.fatal(e);
  }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...