JavaSpring和Jquery
我使用SpringFramework3.1,我有一个页面,它显示一个对象列表。 例如:
<c:forEach var="person" items="${restaurants}">
...
</c:forEach>
以及控制器方法(1)的代码:
@RequestMapping(value = "/people",method = RequestMethod.GET)
private String restaurants(Map<String, Object> map) {
List<Restaurant> r=new ArrayList<Restaurant>();
for(int i=0;i<5;i++)
{
Restaurant restaurant=new Restaurant();
restaurant.setAbout("bla bla!"+i);
restaurant.setName("REstaurant"+i);
r.add(restaurant);
}
map.put("restaurants",r);
return "/restaurants";
}
现在我想使用AJAX动态更改信息
我的AJAX POST请求方法(2):
@RequestMapping(value = "/restaurant")
private @ResponseBody List<Restaurant> restaurant(Map<String, Object> map,
@RequestParam(value = "id", required = false) Long id,HttpServletResponse response) {
List<Restaurant> r=new ArrayList<Restaurant>();
for(int i=0;i<5;i++)
{
Restaurant restaurant=new Restaurant();
restaurant.setAbout("bla bla bla!"+i);
restaurant.setName("REstaurant"+i);
r.add(restaurant);
}
return r;
}
在ajax请求之后,如何显示收到的信息?我可以用c:forEach标签再做一次吗?我知道我应该重写我的第二种方法。 根据第二个方法中的id参数,获取对象并将其放入第一个方法中使用的同一个模型页面
# 1 楼答案
@Kevin的帖子是正确的,您确实需要在配置中添加一些JAR,并且您需要实现ContentNegotingViewResolver,以便它从您的控制器生成JSON
This video涵盖了准确设置您要执行的操作的所有步骤
# 2 楼答案
有两种方法可以实现这一点,但是不能将
c:forEach
标记与返回JSON
的Ajax请求混合使用第一种方法是发送
Ajax
请求,从第二个控制器检索JSON
数据这种方法不能利用
for:each
标记,因为ajax请求由客户端处理,而JSTLforeach
标记是服务器端技术另一种方法是将select标记的标记放入片段中。这将允许您重用组件以及独立地调用它
因此,让我们在主页(Restarunts)中说:
片段(myFragment.jsp)如下所示:
假设设置了适当的ViewResolver,您可以修改控制器以返回视图而不是JSON
然后可以使用jQuery重新加载
select
元素:简而言之,我推荐两种方法:
通过ajax检索JSON并通过Javascript构建select元素,然后用新构建的元素替换现有的select元素。这是一种传统的客户端方法
使select元素成为片段。让控制器的响应返回片段并将该元素加载到DOM中