2017-04-23 141 views
0

我需要从页面上动态加载数据库中的数据,而不需要重新加载页面。

我在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($。员额)数据库中的某些信息。我期待作为包含数据库信息的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); 
     */ 
    } 

里面的数据访问类,我做的所有的数据库查询并返回通过其方法的结果。我需要HttpServletResponse对象,因为我会以JSON对象的形式返回jQuery代码。 在控制台,但我得到象这样的错误:

jquery.min.js:4 POST http://localhost:8080/Mytuition/PopulateClassSample 400() 

并在控制器方法初始打印不被执行。

我试过声明一个单独的模型类(它有两个字段 - 一个String和一个String的ArrayList)并使用了@ModelAttribute注解。但后来我得到这样的例外:

java.lang.NumberFormatException: For input string: "" 

有没有办法做到没有@ModelAttribute注释?为什么即使我正在使用@ModelAttribute注释,它也不能正常工作?

注:我一定会返回一些东西给JSP。该部分仅出于测试目的而被注释掉。

+0

使用的变量,比如'数据:{ 名单:classArray, 开始: “1” }, 标题:{ 'Accept':'application/json' }' –

+0

它易于使用$ .ajax({url,type =“POST”,data //上面提到的,header //上面,success //回调方法成功响应}); –

+0

ajax是异步的。我需要同步响应。 @mosean –

回答

1

您的控制器方法错了。如果您正在对服务器执行Ajax调用,并且需要从服务器检索JSON响应,则只需执行2件事。

  1. 使用@ResponseBody在控制器中定义您的方法。然后Spring会将您返回的对象转换为JSON格式

  2. 将某些对象返回到视图。您正在返回 “空”

应该是这样的

@RequestMapping(value="/PopulateClassSample", method = RequestMethod.POST) 
    @ResponseBody 
    protected List<AcademicClass> SendResponse(@RequestParam("list") ArrayList<String> list, @RequestParam("start") String start) throws IOException 
    { 
     /** DO your staff here and return the AcademicClass list */ 
     System.out.println(start); 
     DataAccess db = new DataAccess(); 
     return db.getClassList(); 
    }