我有一个JSP页面,第一次使用项目列表进行调用。 在选择下拉列表(选择)时,我触发AJAX代码以获取特定于所选选项的产品,并且我想用更相关的产品覆盖产品列表。
有没有办法可以将它设置为“$ {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 :(得分:0)
有两种方法可以解决您的问题,但首先您应该知道JSP
和el
都是服务器端技术,这意味着它们在服务器端执行以生成{{ 1}}发送到客户端的响应将在浏览器中呈现,因此在您的情况下,一旦产品表首次在客户端呈现,您将不得不使用一些HTML
代码在客户端执行以删除/替换该表内容
所以第一种方式是将该表放在单独的JavaScript
文件中(例如JSP
和
而不是返回products_view.jsp
对象,您从控制器方法返回products
对象:
控制器
ModelAndView
products_view.jsp
@RequestMapping( method=RequestMethod.GET, value="/products_view" )
public ModelAndView MyController() {
// ...
List<Product> products = prodcat.getList();
model.addAttribute( "products", products );
return new ModelAndView( "products_view" );
}
AJAX
<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>
另一种方法是从控制器返回该产品列表的JSON或XML响应,然后将该JSON响应填充到客户端的表中,确保您拥有{ {3}}依赖项列表中的jar文件
控制器
// Ajax...
success: function(result) {
if (result.length > 0) {
$("#products_table").html( response );
}
}
AJAX
@RequestMapping( method=RequestMethod.GET, value="/products_view", produces="application/json" )
public @ResponseBody List<Product> MyController()
// ...
List<Product> products = prodcat.getList();
return products ;
}
答案 1 :(得分:0)
感谢您的回复让我告诉您我的方法。我使用AJAX Jackson并尝试将产品列表传递给视图。我在我的产品(一)和评级(很多)之间进行了双向映射,它隐含地在对象转换上进入无限循环,因为它在产品中找到了评级和评级中的产品。 我创建了另一个Model类,只从products类中设置了我需要的属性,而不是发送产品列表。所以最后我用我收到的新元素覆盖了div标签。