我需要在页面上动态加载数据库中的数据,而不需要重新加载页面。
我在JSP中的代码是这样的:
<script>
$(document).ready(function() {
$("#ClassNext").click(function(event){
var data = {};
var classArray = [];
$.each($("input[name='classCheckbox']:checked"), function(){
classArray.push($(this).val());
});
console.log(classArray);
data["list"] = classArray;
data["var"] = "1";
console.log(data);
$.post('PopulateClassSample',data,function(responseJson){
if(responseJson!=null){
$.each(responseJson,function(key,value){
// do something
})
}
})
})
});
<script>
<c:forEach items="${classList}" var="Class">
<li>
<input class="classCheckbox" type="checkbox" name="classCheckbox" value="${Class.classStart}"></input>
<c:out value="${Class.showString}"/>
<button style="display: none;" id="${Class.classStart}">Edit</button>
</li>
</c:forEach>
<button id="ClassNext">Next</button>
这里我发布了一个通过jQuery POST($ .post)从数据库中提取一些信息的请求。我希望响应作为一个JSON对象,其中包含数据库中的信息。 data
变量是两个字段的对象 - 一个字段包含字符串数组,另一个字段包含字符串。这个data
变量通过javascript正确获取其所需的值。
在控制器中捕获此请求的方法:
@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST)
@ResponseBody
protected void SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start, HttpServletResponse response) throws IOException
{
for(String s:list){
System.out.println(s);
}
System.out.println(start);
/*
ArrayList<AcademicClass> classList = new ArrayList<AcademicClass>();
DataAccess db = new DataAccess();
classList = db.getClassList();
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(classList,new TypeToken<List<AcademicClass>>() {}.getType());
JsonArray jsonArray = element.getAsJsonArray();
response.setContentType("application/json");
response.getWriter().print(jsonArray);
*/
}
在DataAccess类中,我正在进行所有数据库查询并通过其方法返回结果。我在这里需要HttpServletResponse对象,因为我将jQuery代码作为JSON对象返回。 但是我在控制台中遇到这样的错误:
jquery.min.js:4 POST http://localhost:8080/Mytuition/PopulateClassSample 400 ()
控制器方法中的初始打印不会被执行。
我尝试声明一个单独的模型类(它有两个字段 - 一个字符串的StringList和一个String)并使用了@ModelAttribute注释。但后来我得到这样的例外:
java.lang.NumberFormatException: For input string: ""
没有@ModelAttribute注释,有没有办法做到这一点?即使我使用@ModelAttribute注释,为什么这不起作用?
注意:我肯定会向JSP返回一些东西。该部分仅出于测试目的而被注释掉。
答案 0 :(得分:1)
你的控制器方法错了。如果您正在对服务器执行Ajax调用并需要从服务器检索JSON响应,则只需执行两项操作。
使用@ResponseBody在控制器中定义方法。然后Spring会将您的返回对象转换为JSON格式
将一些对象返回到视图中。你要回来&#34; void&#34;
应该是这样的
{{1}}