基本上我有一个按钮实例化的Ajax请求,它被传递给我的控制器,然后该控制器返回一个对象列表。我最初在考虑是否可以通过将返回的ajax对象加载到JSTL forEach循环中来完成,但我认为在经过一些研究之后无法做到这一点。 这是我的ajax请求,它根据值加载目击:
//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;
}
基本上我想将返回的对象加载到for each循环或者显示对象字段的东西中。例如:类似的东西。 我的每个循环:
<c:forEach var="sighting" items="${sightings }">
<c:out value="sighting.name"/> <!-- load some sighting value -->
</c:forEach>
基本上我想要实现的是,在实例化按钮时,将多个或一个'目击'加载到模态类型的东西中。
答案 0 :(得分: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);
});
答案 1 :(得分: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);
});
});
这将构建一个包含HTML的String
,每个目标都有一个li
。然后将HTML作为#sightings ul
的子项附加到DOM。
答案 2 :(得分:0)
由于您正在使用ajax,因此一旦您的请求返回响应,页面就不会重新加载,所以无论如何这个代码 不管用。 你能做的不是发送一个列表,你可以发送一个JSON数组作为响应,每个数组元素都有一个具有所有必需属性的JSON对象,这个数组可以在收到响应后迭代。