如何使用EL将AJAX返回的列表设置为页面上的列表引用

问题描述 投票:2回答:2

我有一个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
}
jquery ajax spring el
2个回答
0
投票

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


0
投票

有两种方法可以解决您的问题,但是首先您应该知道JSPel都是服务器端技术,这意味着它们在服务器端执行以生成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 ;
}
© www.soinside.com 2019 - 2024. All rights reserved.