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

时间:2017-04-23 02:12:46

标签: jquery ajax spring el

我有一个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
}

2 个答案:

答案 0 :(得分:0)

有两种方法可以解决您的问题,但首先您应该知道JSPel都是服务器端技术,这意味着它们在服务器端执行以生成{{ 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标签。