一.概述
SpringMVC:
1.是面對方法級變量的,在操作起來會比struts方便一些(structs是類級變量),具體體現在了srpingMVC的注解上面,
如@RequstMapping("/login"),而且對於返回值ModelAndView這也是一大亮點,既可以返回一個頁面(View),再加上@ResponseBody注解以后就可以返回一個 模型對象(也就是一種數據結構)。
2.對於方法級傳入的參數操作起來也相當方便,比如本例中,在加載DataGrid時,會像后台傳遞一個 page=1&rows=10 這樣的數據,分別表示,第1頁和10行數據。
此時,只要在Controller對應的方法上添加兩個參數(int page , int rows)就可以拿到這兩個數據。
二.具體實現
1.UserController.java,定義了一個DataGrid的工具類,主要將需要回傳的數據格式打包,其中total表示一共的數據,后面的為json數據對象。

1 {"total":13,"rows":[{"id":1,"userName":"zhangsan","age":"22"},{"id":2,"userName":"123","age":"321"},{"id":3,"userName":"3123","age":"4444"},{"id":4,"userName":"432","age":"444"},{"id":5,"userName":"1234","age":"123412"},{"id":6,"userName":"1234","age":"4324"},{"id":7,"userName":"1234","age":"4324"},{"id":8,"userName":"1234","age":"4324"},{"id":9,"userName":"1234","age":"4324"},{"id":10,"userName":"1234","age":"4324"}]}

1 @RequestMapping("/getUsers") 2 @ResponseBody 3 public DataGrid getUsers(int page,int rows){ 4 DataGrid dg = new DataGrid(); 5 List list = userManager.find(page, rows); 6 Long total = userManager.getCountUsers(); 7 dg.setTotal(total); 8 dg.setRows(list); 9 return dg; 10 }
2.UserManager主要就是通過UserDao傳入的page和rows 的find方法來獲取User的List結果集。

1 public List find(int page, int rows) { 2 return userDao.find(page, rows); 3 }
3.UserDao通過hql語句,對於后面的return的方法。我也是抄過來的,具體什么意思也沒看。。。反正返回的結果是對的。。。

1 public List find(int page, int rows) { 2 String hql = "from User"; 3 Query query = this.sessionFactory.getCurrentSession().createQuery(hql); 4 return query.setFirstResult((page - 1)*rows).setMaxResults(rows).list(); 5 }
4.前段js,顯示dataGrid數據,這里沒有什么好說的,注意pageSize要和PageList相互配置才行。
$(function(){ $('#datagrid').datagrid({ url:'user/getUsers', rownumbers:true, singleSelect:true, pagination:true, idField:'id', fitColumns:true, fit:true, nowarp:false, border:false, pageSize:5, pageList:[5,10], columns:[[ {field:'id',title:'id',width:100,align:'right'}, {field:'userName',title:'姓名',width:100,align:'right'}, {field:'age',title:'年齡',width:100,align:'right'} ]] }); });
這樣,大功告成,成功顯示分頁數據。
三.總結
對於MVC的三層結構的意義似乎很了解了,但是在實際的運用上,還做不到爐火純青,主要體現在Controller層次和Service的層次上,而我的Service層上幾乎沒有什么操作,只是返回一個Dao層的一個結果,而大量的(我也不清楚Controller上的代碼是否為業務邏輯)業務邏輯都寫在了Controller上面,顯得有些頭重腳輕,不便於日后程序的更改。