最近在學習easyui的使用,在學到datagrid的時候遇到了一些問題,終於抽點時間整理了一下,分享出來,請各位前輩高手多多指教! javascript
1、先來看看效果,二話不說,上圖直觀! php
2、easyui的datagrid的使用方法 html
在這裏,datagrid的使用我不作過多講解,俺畢竟是初學者,不敢班門弄斧。因此就簡單帶一下。 java
①、在easyui的layout中的center中定義一個table,id爲「datagridTable」。 spring
<div region="center" border="false"> <table id="datagridTable"></table> </div>
②、使用javascript的方式讓這個table變爲一個easyui的datagrid。固然也能夠給這個table指定class屬性爲「easyui-datagrid」,兩種方式均可以,蘿蔔白菜,各有所愛。因爲datagrid和後臺的數據交互打交道的比較多,因此俺使用的功能比較好控制的javascript方式定義。 json
代碼以下,其中具體的屬性和方法請查看easyui文檔,官網地址:http://www.jeasyui.com/documentation/datagrid.php,標紅的部分爲後臺struts處理的Url和顯示分頁工具欄的設置。 session
<script type="text/javascript"> $(function() { $("#datagridTable").datagrid({ url : 'getUsers', title : '用戶列表', pagination : true, pageSize : 10, pageList : [ 10, 20, 30, 40 ], fit : true,//自適應窗口大小變化 fitColumns : true, border : false, idField : 'id', columns : [ [ { title : '用戶編號', field : 'id', width : 100 //寬度必須,數值隨便 }, { title : '用戶名', field : 'username', width : 100 }, { title : '用戶密碼', field : 'password', width : 100 },{ title:'註冊時間', field:'date', width:100 } ] ], toolbar : [ { text : '增長', iconCls : 'icon-add', handler : function() { } }, '-', { text : '刪除', iconCls : 'icon-remove', handler : function() { } }, '-', { text : '編輯', iconCls : 'icon-edit', handler : function() { } } ] //兩個[],實現多級表頭,合併單元格的效果,產生不規則表頭 }); });
@Controller(value = "GetUserAction") @Scope("prototype") public class GetUserAction { //使用spring的annotation注入 @Resource(name = "userDao") private UserDao ud; //page和rows屬性,是easyui分頁工具的屬性,名字固定,便於struts2的自動封裝和類型裝換,能夠經過Firebug看到。 private int page; private int rows; //省略的set/get方法 public String getUsers() { //存放數據的list List<User> users = new ArrayList<User>(); //這個User是後來作數據過濾的時候封裝的過濾條件。 User u =new User(); //使用spring的BeanUtils工具,複製屬性到u裏面。 BeanUtils.copyProperties(this, u); //後臺的getUsers方法,這裏我省略了service層,採用domain,action,dao,daoImpl架構,功能簡單,就沒加上service這一層。 users = (List<User>) ud.getUsers(page, rows, u); Map<String, Object> m = new HashMap<String, Object>(); //total是easyui分頁工具的總頁數。名字固定。 m.put("total", ud.getTotal(page, rows, u)); m.put("rows", users); //本身寫了一個java對象轉換成json的工具類,俺用的是jackson,使用json-lib的同窗能夠本身寫一個。不過jaon-lib的轉換速度比較慢,沒有jackson快。 JSONParser.writeJson(m); return "success"; } }
④、看一眼getUsers(int page,int rows,User u)和getTotal(int page,int rows,User u)方法 架構
@Service("userDao") public class UserDaoImpl implements UserDao { //注入hibernate的sessionFactory,很少說。 @Resource(name = "sessionFactory") private SessionFactory sessionFactory; //過濾條件,動態拼接HQL語句。 public String addWhere(String hql, User u) { if (u.getUsername() != null && !u.getUsername().trim().equals("")) { hql += " where 1=1 and u.username like '%%" + u.getUsername() + "%%'"; } return hql; }; //設置爲只讀事務 @Override @Transactional(readOnly = true) public List<?> getUsers(int page, int rows, User u) { String hql = "from User u "; hql = addWhere(hql, u); Query query = sessionFactory.getCurrentSession().createQuery(hql); //hibernate的分頁就依靠這兩個set方法,詳情請查看API文檔。 query.setFirstResult((page - 1) * rows); query.setMaxResults(rows); //將結果以list返回。 return query.list(); } //getTotal方法第一種寫法,使用HQL的count函數 @Override @Transactional(readOnly = true) public Long getTotal(int page, int rows, User u) { String hql=" select count(*) from User u"; hql=addWhere(hql, u); Query query = sessionFactory.getCurrentSession().createQuery(hql); //注意類型爲Long。 return (Long) query.list().get(0); } /** //getTotal方法的第二種寫法,不使用HQL的count函數。 @Override @Transactional(readOnly = true) public List<?> getTotal(int page, int rows, User u) { //不適用count,查詢全部的,action經過ud.getUsers(page,rows,u).size()得到total。性能較差,畢竟我只要一個 //count數值,hibernate卻list全部的以後在求size()。 String hql=" from User u"; hql=addWhere(hql, u); Query query = sessionFactory.getCurrentSession().createQuery(hql); return query.list(); } */ }
⑤、到此,後臺功能開發完成,部署,運行便可。 dom
page,rows,total參數解釋 ide
如圖:
寫下這篇文章,一是爲了本着分享精神能與你們共同窗習,探討和進步。二是爲了記錄一下學習筆記,以備往後只需,查閱方便。不正確指出,望你們多多批評指正。(個人CSDN博客也有這篇文。。(⊙o⊙))
後續我將把JSONParser的代碼分享一下,用於將list轉換成標準的json格式。