我有一个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
}
感谢您的回复,我告诉您我的做法。我使用AJAX Jackson尝试将产品列表传递到视图中。在对象转换时,我的产品(一个)和等级(许多)之间存在双向映射,这在对象转换中是一个无限循环,因为它正在查找产品中的等级和产品的评级。我创建了另一个Model类,并只设置了我从产品类中需要的属性,而不是发送产品列表。因此,最后,我只是用收到的新元素覆盖了div标签。
有两种方法可以解决您的问题,但是首先您应该知道JSP
和el
都是服务器端技术,这意味着它们在服务器端执行以生成HTML
响应并发送给到要在浏览器中呈现的客户端,因此,在您的情况下,第一次在客户端呈现product表时,您将必须使用一些在客户端执行的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
个jar您的依存关系列表
控制器
Jackson
AJAX
@RequestMapping( method=RequestMethod.GET, value="/products_view", produces="application/json" )
public @ResponseBody List<Product> MyController()
// ...
List<Product> products = prodcat.getList();
return products ;
}