使用Spring MVC和ajax来处理对象列表

使用AJAX和spring MVC,如何从Spring Controller返回对象列表并使用Jquery显示它们。

在下面发出Ajax请求:

$.ajax({ type: "POST", url: "allUser.html", dataType:'json', data: "select=" + selectedCheckboxArray, success: function(data){ var userListContent=""; var json =data.message; $.each(json, function(i, obj) { userListContent=userListContent+""; userListContent=userListContent+" "; userListContent=userListContent+""+obj.firstName+" "+obj.lastName +""; userListContent=userListContent+""+ obj.gender +""; userListContent=userListContent+""+ obj.userName +" "; userListContent=userListContent+" "+ obj.userType +""; userListContent=userListContent+""+ obj.status +""; userListContent=userListContent+""+ obj.emailId +""; userListContent=userListContent+""+ obj.address +""; userListContent=userListContent+""+ obj.contactNo +""; userListContent=userListContent+""; }); $('#rounded-corner tbody').html(userListContent); //console.log(userListContent); }, error: function(e){ alert('Error: ' + e.responseText); } }); 

MVC Contrller

  @RequestMapping(value="/deleteUser",method= RequestMethod.POST) public @ResponseBody Map deleteUser(UserDetails user,HttpServletRequest request,HttpServletResponse response )throws ServletException,IOException { System.out.println("Ajax Request Received for delete User..............."); Map model = new HashMap(); JsonResponse js=new JsonResponse(); js.setResult("pass"); js.setStatus("active"); // String operation=request.getParameter("operation"); String[] selectedUserIdParameter = request.getParameterValues("select"); System.out.println("Length:"+selectedUserIdParameter.length); /* Code Description: * Array "selectedUserIdParameter" above has ID like {1,2,3,.....}, * we need to use array like {1 2 3 4 } without (,).so first we must convert. * Following code doing the same. * After Conversion Array "selectedUserId" will have ID like {1 2 3 4 } * If You Know PHP explode()" function ,following is doing something like what explode() function does . */ String msg="hello"; List usersList = userService.getAllUser(); int no=usersList.size(); System.out.println("Size:"+no); model.put("message", usersList); model.put("jso", js); return model; } 

您将以JSON的forms接受并返回对象,因此在spring dispatcher servlet xml中添加jackson mapper bean。 jackson映射器做到了这一切。 您无需手动进行映射或转换。

           

现在您的控制器将是这样的:

 @RequestMapping(value = "/deleteUser", method = RequestMethod.POST) public @ResponseBody List deleteUser(@RequestBody UserDetails userDetails) { // fetch the userid to be deleted from the userDetails // remebmer the id of user to be deleted will be set in the ajax call userService.deleteUser(userDetails.getUserId()); // again populate the user list to display on page List userList = userService.getAllUser(); return userList; } 

现在你ajax调用将是这样的:

 function deleteUser() { // set variables into javascript object which you need to send to spring controller // the variable name here should be same as it is in your java class UserDetails.java var user = new Object(); user.userId = 120; // id of user to be deleted $.ajax({ type : 'POST', url : '/${your project context path here}/deleteUser', dataType : 'json', data : JSON.stringify(user), contentType : 'application/json', success : function(data) { //here in data variable, you will get list of all users sent from // spring controller in json format, currently its object // iterate it and show users on page showUsers(data); }, error : function() { alert('error'); } }); } function showUsers(data) { // and here you show users on page //following code just example $('#allUsers').append(""); for ( var i = 0, len = data.length; i < len; ++i) { var user = data[i]; $('#allUsers').append(""); } } 

这会奏效。

直接返回ArrayList应该有效……

 @RequestMapping(value="/deleteUser",method= RequestMethod.POST) public @ResponseBody ArrayList deleteUser(UserDetails user,HttpServletRequest request,HttpServletResponse response )throws ServletException,IOException { System.out.println("Ajax Request Received for delete User..............."); // String operation=request.getParameter("operation"); String[] selectedUserIdParameter = request.getParameterValues("select"); System.out.println("Length:"+selectedUserIdParameter.length); /* Code Description: * Array "selectedUserIdParameter" above has ID like {1,2,3,.....}, * we need to use array like {1 2 3 4 } without (,).so first we must convert. * Following code doing the same. * After Conversion Array "selectedUserId" will have ID like {1 2 3 4 } * If You Know PHP explode()" function ,following is doing something like what explode() function does . */ String msg="hello"; List usersList = userService.getAllUser(); int no=usersList.size(); System.out.println("Size:"+no); return usersList; } 

这可能为时已晚,但只是为了向您展示如何通过使用jQuery Ajax调用一个动作,我在这里提供了我在项目中所做的任何事情:( Ajax调用For user validation)

要在* .js文件中编写的Ajax函数:

 function validateUserBeforeCreatingUser(email){ var url='validateUser.htm?'&email='+email; $.ajax({ url: url, cache: false, success: function(response){ $("#errors").html(jQuery.trim(response)); //if errors not present if(jQuery.trim(response)==''){ createUser(); } }, error: function(response){ } }); } 

这是我在控制器中写的动作 :(我创建了errors.jsp页面来渲染错误)

 public ModelAndView validateUser(HttpServletRequest request, HttpServletResponse response) throws Exception { /* write code to validate user, if user with specified email not found then create error else keep errors page blank */ return new ModelAndView("partial", "errors", errors); } 

希望这能为你提供答案,对不起缩进,我不能正确地做到:-(