将Java列表返回到jQuery对象

时间:2013-10-16 08:56:59

标签: java javascript jquery ajax spring-mvc

基本上我有一个按钮实例化的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>

基本上我想要实现的是,在实例化按钮时,将多个或一个'目击'加载到模态类型的东西中。

3 个答案:

答案 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对象,这个数组可以在收到响应后迭代。