【发布时间】:2015-04-24 21:50:53
【问题描述】:
我试图从我的 JSP 页面点击控制器。我编写了以下函数,单击特定链接时将调用该函数。
函数实现如下图:
function categorySearchBasedOnParentId(name,id){
$.ajax({
url:"${pageContext.request.contextPath}/customer/get_categoriesByParentId.shx",
data: 'id='+id,
success:function(data){
var obj1 = jQuery.parseJSON(data);
var obj2 = obj1.tempCategoriesList;
$("#subCategoriesFilter").html(buildSub(obj2));
},
error:function(data,status,err){
alert("Error occured while searching the categories based on the parent category id");
}
});
在上面的函数中,我试图点击控制器 url,控制器返回 JSON 对象。我正在将 JSON 转换为 JavaScript 对象并迭代它的值以显示在特定的 div 标签中。
我在spring写的控制器如下。
@RequestMapping(value = "/customer/get_categoriesByParentId.shx",method = RequestMethod.GET, headers="Accept=*/*")
public @ResponseBody String getCategoriesByParentId(Model model,HttpSession session,
@ModelAttribute("shoppingCart") ShoppingCart shoppingCart,
@RequestParam("id") String id) throws IOException{
shoppingCart.setTempCategoriesList(categoryDao.getAllCategoriesByParentCategoryId(id));
model.addAttribute("shoppingCart", shoppingCart);
String json = JSONUtil.createJsonString(shoppingCart);
System.out.println(json);
return json;
}
我做了以下测试: 1)该值已正确传递给函数。我已经警觉并看到了。 2)相同的控制器调用可以在另一个项目中完成。它正在返回 JSON 对象。
我在控制台无限时间出现以下错误。
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
我几乎把一整天的时间都浪费在了这上面。我需要帮助。请帮帮我。
【问题讨论】:
-
你可以尝试删除 @ModelAttribute("shoppingCart") ShoppingCart shoppingCart 作为参数,看看它是否击中控制器?既然你在做 GET,我想知道 @ModelAttribute("shoppingCart") 没有被传入。
-
@minion :我需要 shoppingCart 对象值,所以我无法删除它。我必须将其转换为 JSON 并将其发送到视图,即; jsp页面。我在 org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java: 150) 在 org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
-
你从哪里得到购物车?某些功能必须通过它。还提供完整的堆栈跟踪。
-
@minion:我存储的 shoppingCart 的值是之前使用它设置方法的函数。像这样然后将其添加到模型属性中,如下所示 shoppingCart.setCategories(categoryManager.getCategories(categoryType)); shoppingCart.setCategoriesMap(categoryManager.getCategoriesMap(categoryType)); model.addAttribute("shoppingCart", shoppingCart);
-
能把之前的函数贴出来吗? spring flow中如何调用之前的函数?
标签: javascript jquery ajax spring-mvc spring-security