0

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

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

4

3 回答 3

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);
});
于 2013-10-16T09:03:04.503 回答
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包含li每个目击事件的 HTML。然后 HTML 作为#sightings ul.

于 2013-10-16T09:01:43.837 回答
0

由于您使用的是 ajax,因此一旦您的请求返回响应,页面将不会重新加载,因此无论如何此代码将不起作用。您可以做的是发送一个 JSON 数组作为响应,而不是发送一个列表,每个数组元素将有一个 JSON 对象,该对象具有所有必需的属性,并且可以在收到响应后迭代该数组。

于 2013-10-16T09:06:42.337 回答