如何将Spring MVC的JSON响应放入jsp中的表中
How to place Spring MVC's JSON response into the table in jsp?
的AJAX脚本的样子:
<script>
function addToCart(itemId) {
var url = "./addToCart/" + itemId;
$.get(url, function(response){
$('#shoppingCartId').text(response);
});
}
</script>
它从JSP中获取一个itemId,用这个itemId调用下面的控制器方法。这是控制器方法:
@RequestMapping(value="/addToCart/{itemId}", method=RequestMethod.GET)
public @ResponseBody ShoppingCart addToCart(@PathVariable Long itemId, @ModelAttribute ShoppingCart shoppingCart) {
Item item = itemService.getItemWithId(itemId);
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return shoppingCart;
}
问题是,我想将响应(购物车对象)放入此表中,该表位于同一jsp上。但是怎么做呢?
<div class="span2" id="shoppingCartId">
<table class="table table-condensed">
<tr>
<td><b>#</b></td>
<td><b>NAME</b></td>
<td><b>PRICE</b></td>
</tr>
<c:forEach items="${shoppingCart.items}" var="item" varStatus="count">
<tr>
<td>${count}</td>
<td>${item.name}</td>
<td>${item.price}</td>
</tr>
</c:forEach>
<tr>
<td></td>
<td></td>
<td><b>Total Price: {shoppingCart.totalPrice}</b></td>
</tr>
</table>
</div>
如果我可以将响应添加到请求属性中,则表将得到满足。但是如何将此对象放入请求中呢?还是实际上进入表格?
我认为问题就在这里,在成功函数中:
function(response){
$('#shoppingCartId').text(response);
}
在这里,我获取 shoppingCartId DOM 对象(这是表所在的分区),并将响应对象(即购物车)设置为 Text。我甚至可以像这样设置购物车对象的属性:
function(response){
$('#shoppingCartId').text(response.totalPrice);
}
并且对象的 totalPrice 将显示在看到该表的 jsp 上。但是如何将这个响应对象直接放置在表中呢?正如我已经说过的,如果我能像任何其他 java 对象一样将响应添加到请求属性中,那么该表将得到满足。但是如何将此 JSON 对象放入请求中?还是实际上进入表格?
如果您询问如何使用 jsp 渲染ShoppingCart
,则需要删除@ResponseBody
注释,而是返回一个值,该值指示要用于进行渲染的视图,例如具有视图名称的String
。
@RequestMapping(value="/addToCart/{itemId}", method=RequestMethod.GET)
public String addToCart(@PathVariable Long itemId, @ModelAttribute ShoppingCart shoppingCart) {
Item item = itemService.getItemWithId(itemId);
if(item != null) {
shoppingCartService.addItem(shoppingCart, item);
}
return "yourViewName";
}
在此示例中,"yourViewName"表示要在其中呈现表的 jsp。
评论后编辑
如果你对 JavaScript 对象作为 success()
方法中的response
有一些其他需求,那么你需要在客户端从头开始重绘表。但是,如果这样做,则会重复视图呈现工作:在第一次访问时,视图使用 jsp 呈现,但在后续的 ajax 调用中,它使用 jquery 重绘,并且对视图的任何更改都必须在两个位置进行修改。不过,如果要走这条路,则必须逐步执行response
对象中的每个必要属性,并创建重建该表所需的相应 HTML 标记。正如您所注意到的,简单地尝试$('#shoppingCartId').text(response);
只会用一些废话代替您的桌子;这是因为response
没有内置HTML的概念...这只是数据。
为了避免视图渲染重复,我建议您尝试其他方法。<table>...</table>
部分应移动到其自己的 jsp,并且您的 ajax 调用应将响应视为文本而不是 json。当你这样做时,你的response
对象将是呈现的表格html,然后你可以简单地$('#shoppingCartId').html(response);
将旧表换成新表。对于第一次访问,只需将表的 jsp 包含在<div class="span2" id="shoppingCartId">...</div>
中即可重复使用。最后,您的视图将始终使用相同的方法呈现,因此您的代码将更加干净。
- 使用JSP从服务器检索和显示图像
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 将对Ajax PUT的json响应重定向到要由EL解析的JSP中
- 如何将Spring MVC的JSON响应放入jsp中的表中
- 如何使用 jquery 遍历我的 JSP 响应
- 如何在数据驱动文档中创建动态 json 并在 jsp 中获取 json 响应
- Struts2 到 ajax json 响应如何在 Jsp 页面上设置图像
- 如何将 JSON 对象从服务器发送到 JSP 并在 JSP 上接收响应
- 从servlet请求不同的响应,并使用AJAX和JSP
- 从servlet获取json响应并显示在jsp表中
- 如何使用JavaScript在SpringMVC中获得对JSP的Unicode响应
- 无法在我的JSP中检索JSON响应
- Jquery日期拾取器,即使另一个具有共享导入的JSP工作也没有响应
- JSP + Ajax -如何对变量进行响应
- 设置jsp上的Ajax响应不起作用
- 如何查看在Spring+JSP中发送请求和获取响应之间的时间差
- 在成功响应之后,通过ajax将值传递到第二个jsp页面
- 如何将jsp中检索到的服务器响应映射到iFrame
- Jsp测验保存响应临时的
- JavaScript jquery ajax 通过使用 xml post 方法以 JSP 格式处理响应