2013-05-02 123 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; 
    } 

以便將sended回JSON對象客戶將看: {'錯誤':0,'內容':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 2013-05-02 10:51:09

+0

@nKognito它比聽起來複雜得多。對於每個'jsp'都會生成一個java類。此類負責將內容寫入響應。細節有點依賴於服務器。該類的名稱可以是'org.apache.jsp.WEB_002dINF.myjsp_jsp'例如你將不得不知道以什麼順序調用哪些方法。 – zeroflagL 2013-05-02 11:24:31

+0

但它只是jsp,我的意思是沒有任何模型參數......好吧,據我所知這是不可能的。不管怎麼說,還是要謝謝你! – nKognito 2013-05-02 12:37:09