2013-10-16 65 views
0

基本上我有一個按鈕實例化的Ajax請求,它被傳遞給我的控制器,然後該控制器返回一個對象列表。我最初想着是否可以通過將返回的ajax對象加載到JSTL forEach循環中來完成,但是我認爲在進行一些研究之後無法完成。 這是加載基於價值瞄準我的Ajax請求:將Java列表返回到jQuery對象

//edit the sighting based on the username value 
    $(this).on("click", ".edit_sighting", function(){ 
     $username = +$(".edit_sighting").val(); 
     $.get("${pageContext.request.contextPath}/getSighting/" + username, function(sightings){ 
      // load returned object somewhere 
     }); 
    }); 

這是我的控制器,它處理Ajax請求和響應返回對象「瞄準」的列表:

@RequestMapping("/getSighting/{username}") 
public @ResponseBody List<Sighting> getSighting(Model model, @PathVariable String username) { 

    List<Sighting> sightings = sightingsService.getSightings(username); 
    model.addAttribute("sightings", sightings); 
    return sightings; 
} 

,基本上我想將返回的對象加載到每個循環中或者顯示對象字段的東西中。例如:類似的東西。 我的每一個循環:

<c:forEach var="sighting" items="${sightings }"> 
     <c:out value="sighting.name"/> <!-- load some sighting value --> 
</c:forEach> 

所以基本上我試圖實現的是,加載多個或一個「目擊」成模態類型的事情,當按鈕被實例化。

+0

使用Jackson將您的對象序列化爲JSON –

+0

@DavidFregoli考慮到@ ResponseBody註解的存在,我假定OP可能已經是序列化了。 –

回答

2

因爲JSTL在服務器上執行,所以在頁面發送給客戶端之前,您不能使用JSTL。你可以做的是在服務器上渲染HTML並返回一個HTML文檔(而不是JSON)。所以解決方案是定義一個JSP視圖,它使用JSTL來呈現列表並將AJAX請求更改爲接受HTML。

另一種解決方案是添加一個基於JavaScript的模板引擎並執行模板渲染客戶端。

或者用jQuery手動執行。如果你有

<ul id="sightings"></ul> 

那麼你可以

var sightings = $('#sightings'); 
sightings.empty(); 
$.each(sightings, function(index, e){ 
    var li = $('<li>'); 
    li.text(e); 
    sightings.append(li); 
}); 
+0

我做了一個jsp渲染,然後使用ajax調用該特定的表。您的解決方案很有用。謝謝 – Maff

1

ajax請求的響應返回給客戶端,該客戶端無權訪問服務器端機制,如JSTL。代碼應該在客戶端使用Javascript/jQuery來顯示新的DOM元素。

所以,如果你有你的網頁上的以下HTML:

<ul id="sightings"></ul> 

回調看起來像:

$(this).on("click", ".edit_sighting", function(){ 
    $username = +$(".edit_sighting").val(); 
    $.get("${pageContext.request.contextPath}/getSighting/" + username, function(sightings){ 
     var output = ""; 
     for(var i = 0; i < sightings.length; i++){ 
      output =+ "<li>" + sightings[i].name + "<\/li>"; 
     } 
     $("#sightings").append(output); 
    }); 
}); 

這將建立一個包含String HTML它針對每個瞄準的li。然後將HTML作爲#sightings ul的子代附加到DOM。

+0

我當然希望名稱不要包含HTML字符。 –

0

由於您使用AJAX所以頁面不會重裝一次您的請求返回所以反正這碼 將無法​​正常工作的響應。 你可以做的是不是發送一個列表,你可以發送一個JSON數組作爲響應,每個數組元素將有一個JSON對象,它具有所有必需的屬性,並且在收到響應後可以迭代這個數組。