2017-04-23 39 views
2

我有一个第一次使用项目列表调用的JSP页面。 关于选择下拉列表(选择)我触发AJAX代码以获得特定于所选选项的产品,并且我想用更相关的产品覆盖产品列表。如何使用EL设置AJAX返回的列表和页面上的列表引用使用EL

有没有一种方法可以将其设置为“$ {products}”,还是必须使用另一种方法,如隐藏该div标签并显示另一个方法。

我的JSP页面

<div> 
    <c:forEach var="p" items="${products}"> 
    <table> 
     <td>p.name</td> 
     <td>p.description</td> 
    </table> 
    </c:forEach> 
<div> 

我的脚本

// Ajax... 
success: function(result) { 
    if (result.length > 0) { 
    // want to set the products list with the list returned 
    } 
} 

我的控制器

public List<Product> MyController() { 
    // ... 
    List<Product> products = prodcat.getList() 
    return products 
} 

回答

0

感谢您的回复让我告诉你我的做法。我使用了AJAX Jackson,并试图将产品列表传递给视图。在对象转换中,我的产品(One)和评级(Many)之间存在双向映射,因此它将进入无限循环,因为它在产品中查找评级和产品评级。 我创建了另一个Model类,只设置了产品类所需的属性,而不是发送产品列表。 所以最后我刚刚用我收到的新元素覆盖了div标签。

0

有两种方法可以解决你的问题,但首先你应该知道,这两个JSPel是服务器端技术,这意味着他们执行e在服务器端生成发送到客户端的响应,以便在浏览器中呈现,因此在您的情况下,一旦产品表第一次在客户端呈现,您将不得不使用一些JavaScript这是在客户端执行的代码删除/替换该表内容

所以第一种方式是把该表在一个单独的JSP文件(例如,products_view.jsp和 而不是返回products对象,则返回ModelAndView从您的控制器方法的对象:

控制器

@RequestMapping(method=RequestMethod.GET, value="/products_view") 
public ModelAndView MyController() { 
    // ... 
    List<Product> products = prodcat.getList(); 
    model.addAttribute("products", products); 
    return new ModelAndView("products_view"); 
} 

products_view.jsp

<div id="products_table"> 
    <table> 
    <c:forEach var="p" items="${products}"> 
     <tr> 
     <td>p.name</td> 
     <td>p.description</td> 
     </tr> 
    </c:forEach> 
    </table> 
<div> 

AJAX

// Ajax... 
success: function(result) { 
    if (result.length > 0) { 
    $("#products_table").html(response); 
    } 
} 

另一种方法是你从控制器返回产品列表的JSON或XML响应,然后填充将JSON响应放入客户端的表格中,确保您的依存关系列表中有Jackson罐子

控制器

@RequestMapping(method=RequestMethod.GET, value="/products_view", produces="application/json") 
public @ResponseBody List<Product> MyController() 
    // ... 
    List<Product> products = prodcat.getList(); 
    return products ; 
} 

AJAX

// Ajax... 
dataType: "json", 
success: function(result) { 
    if (result.length > 0) { 
    var productTableHTML = '<table>'; 
    $.each(response, function (key,value) { 
     productTableHTML += 
     '<tr><td>' + key + '</td><td>' + value + '</td></tr>';  
    }); 
    productTableHTML += '</table>'; 
    $("#products_table").html(productTableHTML); 
    } 
}