2013-05-02 3 views
0

Мне интересно, возможно ли генерировать вывод ModelAndView программно, а не через параметр возврата контроллера. Например: У меня есть следующий метод, который возвращает скомпилированный HTML:Spring MVC: сгенерируйте ModelAndView программно

@RequestMapping(value = "/get-list", method = RequestMethod.GET, headers = BaseController.AJAX_HEADER) 
public ModelAndView getList(@RequestParam(value = "page", required = true) Integer page, 
      @ActiveUser User activeUser) { 
     ModelAndView result = null; 

     try { 
      result = new ModelAndView("administration/events-log/list"); 
      result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE)); 
     } 
     catch (Exception e) { 
      log(e, activeUser.getUsername()); 
     } 

     return result; 
    } 

То, что я хочу, чтобы создать что-то вроде этого:

@RequestMapping(value = "/get-list", method = RequestMethod.GET, headers = BaseController.AJAX_HEADER) 
public @ResponseBody HashMap<String, Object> getList(@RequestParam(value = "page", required = true) Integer page, 
      @ActiveUser User activeUser) { 
     HashMap<String, Object> json = new HashMap<String, Object>(); 

     try { 
      json.put("error", 0); 
      ModelAndView result = new ModelAndView("administration/events-log/list"); 
      result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE)); 

      json.put("content", result); 

     } 
     catch (Exception e) { 
      /**/ 
     } 

     return json; 
    } 

поэтому объект JSON, который будет отослано обратно в клиент будет выглядеть: {'error': 0, 'content': compiled_html}

Любые мысли? Спасибо

ответ

1

ModelAndView не имеет выхода. Он просто знает имя представления. Отрисовка представления не зависит от Spring MVC.

Если вы просто хотите отправить JSON, который содержит HTML, вы можете положить JSON код непосредственно на ваш jsp. Изменение кода Java так:

result = new ModelAndView("path/to/json"); 
result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE)); 
result.addObject("html", "administration/events-log/list"); 

Ваш JSON может JSP выглядеть следующим образом:

<%@ page contentType="application/json" %> 
{ 
    "error": "0", 
    "content": "<jsp:include page="${html}" />" 
} 

Пожалуйста, обратите внимание, что этот код только для иллюстрации. Возможно, вы адаптируете его к своей ситуации. И вы должны избежать включенного HTML, чтобы получить действительный JSON.

+0

И как я могу назвать средство визуализации JSP? – nKognito

+0

@nKognito Это намного сложнее, чем кажется. Для каждого 'jsp' генерируется класс java. Этот класс отвечает за запись содержимого в ответ. Детали зависят от сервера. Имя класса может быть «org.apache.jsp.WEB_002dINF.myjsp_jsp», например. и вам нужно будет знать, какие методы вызывать в каком порядке. – zeroflagL

+0

, но это только jsp, я имею в виду без каких-либо параметров модели ... Хорошо, поскольку я понимаю, что это невозможно сделать. Спасибо, в любом случае! – nKognito

Смежные вопросы