EasyUI接收的遍歷格式為:{"total":total, "rows":dataList}, 直接傳入List集合,需要寫下面的writeJson方法
或者{"total":2, "rows":[{"username":"張三","password":"123"},{"username":"李四","password":"456"}]}, 通過JSONObject轉成json數組
轉自:http://blog.sina.com.cn/s/blog_86e71e780101i4gs.html
與普通數據遍歷比較
1.普通ssh數據列表展示為請求一個action,后台查詢出數據列表封裝到一個voList中,然后返回跳轉界面,跳轉的時候將數據傳遞到jsp頁面,jsp通過iterator將數據遍歷出來
簡而言之:封裝數據與跳轉界面一步完。
2.easyui的做法為:請求后台action直接跳轉到界面,這個過程中不傳遞數據,進入到展示數據的頁面,這時候easyui表單有一個table的屬性為url ,通過這個屬性異步的去后台查詢需要展示的數據。后台將數據封裝好后傳遞到jsp(需要滿足jason格式),后台封裝的數據名稱自定義,前台jsp中不需要用到,他會根據url請求的地址自動解析返回來的數據。
簡而言之:跳轉頁面再請求數據分兩步完成。
demo詳釋
1.通過設置table的calss屬性將其渲染成easyui格式
<table class="easyui-datagrid" 調用easyUI樣式 rownumbers="true" 是否顯示序號 pagination="true" 是否顯示分頁插件 singleSelect="true" 是否選擇單行(默認鼠標點擊可以選擇多行) url="userManage!getUserList" 數據請求地址(封裝成jason格式) fitColumns="true" 表格是否填充滿整個父窗格 style="width:400px;height:250px"> <thead> 不要忘記寫thread哦 <tr> <th data-options="field:'id',width:80">昵稱</th> 此處field:'屬性值'是固定寫法,必須寫成field <th data-options="field:'name',width:80">姓名</th> <th data-options="field:'sex',width:80" >性別</th> <th data-options="field:'age',width:80" >年齡</th> </tr> </thead> </table>
2.通過script動態加載將id為dataGird1的table渲染成easyui風格的網格
$(function() { $('#dataGrid1').datagrid({ method:'post', url:'userManage!getUserList', title:'標題', rownumbers:true,//顯示序號 pagination:true,//開啟下方分頁欄 pageSize:10, pageList:[10,20,30], fitColumns:true,//列填充滿父窗口 nowrap:false, //內容自動轉行 border:false, idField:'id',//主鍵標識位 columns:[[{ title:'昵稱', field:'id', width:80 },{ title:'姓名', field:'name', width:80, sortable:true },{ title:'性別', field:'sex', width:80 },{ title:'年齡', field:'age', width:80, sortable:true }]] }); });
分頁
easyUI的分頁控件默認有五個屬性
page 當前頁碼
rows 每頁顯示多少行
sort 排序字段名
order 排序方式(asc OR desc)
total 數據總條數
1.ajax請求后台action:
這五個參數可以通過在action中定義相同名稱的變量名來獲取,通過這些字段獲取到數據集后通過返回json集將數據回傳給前台。
2.action回傳給前台:
返回前台的json中有兩個參數需要封裝進去,第一個是total(總條數),第二個是結果集,結果集的key必須為rows(注意:這個地方的rows與從前台傳遞過來的rows不一樣,前台傳過來的為每頁顯示的行數,這個地方是結果集)。
1.action回傳json方法
public void getUserList(){ voList=service.findVolist(page,rows,sort,order); total=service.getTotal(); Map map = new HashMap(); map.put("total", total);//封裝總記錄條數 map.put("rows", voList);//封裝結果集 writeJson(map); }
2.json封裝方法
需要引入包jackson-all-1.7.6.jar
public String getJsonString(Object o){ ObjectMapper om = new ObjectMapper(); StringWriter sw = new StringWriter(); try{ JsonGenerator jg = new JsonFactory().createJsonGenerator(sw); om.writeValue(jg,o); jg.close(); }catch(IOException e){ e.printStackTrace(); } return sw.toString(); } public void writeJson(Object o){ String json = getJsonString(o); try { ServletActionContext.getResponse().getWriter().write(json); } catch (IOException e) { e.printStackTrace(); } }