2014-01-09 184 views
1

爲什麼當我在調用ajax中返回ModelAndView時,它通常工作並顯示jsp頁面,但是當我將其返回到具有其他對象的地圖中時,它不起作用。Ajax調用中返回ModelAndView之間的區別

第一種情況,其工作:

@RequestMapping(value="/searchlostcard") 
public @ResponseBody 
ModelAndView searchlostcard() {    
    [...] 
return new ModelAndView("search/results","cardlist", listlostcard); ; 
} 

我的Ajax調用

[...] 
success : function(responce) {    
    $('#page_grid').html(responce); 
} 

第二種情況不工作:

@RequestMapping(value="/searchlostcard") 
public @ResponseBody 
Map<String, Object> searchlostcard() {   
    [...] 
    ModelAndView MaV = new ModelAndView("search/results","cardlist", listlostcard); 

    Map<String, Object> modelino = new HashMap<String, Object>(); 

    modelino.put("taille", listlostcard.size()); 
    modelino.put("vue", MaV); 

    return modelino ; 

} 

我的Ajax調用

[...] 
success : function(responce) {   
    $('#page_grid').html(responce['vue']); 
} 
+0

你爲什麼要把ModelAndView放到模型圖中?客戶應該用ModelAndView對象做什麼? –

+0

我沒有放在模型地圖中,我把它放在地圖上發送其他物體的視圖。 – Youssef

回答

3

當您返回一個ModelAndView那麼Spring MVC 呈現視圖,並返回渲染視圖,無論@ResponseBody註釋。這就是HTML(假設你的視圖是HTML)被返回給客戶端。

當你返回Map並有@ResponseBody註解雖然那麼Spring返回序列化對象(例如JSON表示地圖字符串)。在這種情況下,您的MaV變量引用的視圖不會呈現。那就是你沒有任何HTML返回給客戶端。

0

你顯然不明白@ResponseBody的概念。它不會觸發JSP(或其他視圖技術),但會返回Object本身,呈現爲JSON,XML或任何內容協商所設置的內容。

您可以嘗試刪除註釋並查看它是否有效。

+0

是的,我知道如果我刪除註釋並返回一個ModelAndView對象它將工作,並顯示我的jsp頁面,但正如你所說,它返回一個json或xml對象,所以ModelAndView是一個對象,它將作爲json對象返回,所以爲什麼在我的主題工作中的冷戰案件,而其次呢? – Youssef

相關問題