寫在前面:
最近項目的前框框架用的是ligerUI,里面用到了ligerGrid表格,下面就來說說從后台獲取數據並在前台頁面進行完美展示。啊哈哈哈。。(天啦,坐我旁邊的麗姐貌似炒股 一個月可以搞幾十萬,厲害厲害厲害了。。。。)
1.前台頁面代碼:
roleGrid = $("#roleGrid").ligerGrid(
{
columns: [
{display: '角色編號', name: 'roleId', align: 'left', width: 100, minWidth: 60,},
{display: '角色名', name: 'roleName', minWidth: 120},//hide:'true'
{display: '角色描述', name: 'roleDes', minWidth: 120,},
{display: '角色類型編號', name: 'roleTypeId', minWidth: 120,},
{display: '角色類型', name: 'roleTypeName', minWidth: 120,},
{display: '創建者', name: 'creator', minWidth: 120,},
{display: '創建時間', name: 'cTime', minWidth: 120},
{display: '更新者', name: 'updator', minWidth: 120},
{display: '更新時間', name: 'uTime', minWidth: 120},
{display: '系統編號', name: 'systemId', minWidth: 120,},
{display: '系統名', name: 'systemName', minWidth: 120,},
],
//這里請求之后的數據不用解析 自動生成表格 注意字段要相互對應
url: '${baseURL}/listAllRole.action',
//向后台提交的數據 根據systemId來進行排序
sortName: 'systemId',
//向后台提交的數據 排序方向為升序
sortorder:'asc',
//后台提交的數據 每頁顯示的記錄數
pageSize: 10,
//onSelectRow選擇行事件
onSelectRow: function (rowdata, rowindex, rowobj) {
//選中行事件。。。
},
checkbox: false,
height: '100%',
rownumbers: true
});
2.后台action代碼:
@Controller("RoleAction")
public class RoleAction extends ActionSupport {
//注入業務層接口
@Resource
private RoleService roleService;
public String roleId;
public String roleName;
public String roleDes;
public String creator;
public String updator;
public String systemId;
public String functionIds;
public String cTime;
public String roleTypeId;
//分頁排序 接收對應的字段
//這些都是前台向后台提交的數據 需要自己獲取
public String page; //當前頁
public String pagesize; //每頁大小
public String sortname; //排序字段
public String sortorder; //升序還是降序
//對返回的json數據提供get方法
private JSONObject jsonObject;
public JSONObject getJsonObject() {
return jsonObject;
}
public String listAllRole(){
try{
//獲取所有的角色數據 分頁排序處理 將分頁排序的相關字段傳到dao層進行處理 這里不做多解釋
List<Role> roleList = roleService.getAllByPage(Role.class,Integer.parseInt(page),Integer.parseInt(pagesize),sortname,sortorder);
//獲取總記錄數
Integer totalCount = roleService.getCount(Role.class);
List<RoleVO> roleVOList = new ArrayList<>();
//這里都是本項目中對數據的一些處理 可以不用細看 這里不重要
for (int i = 0; i < roleList.size(); i++) {
RoleVO roleVO = new RoleVO();
roleVO.setRoleId(roleList.get(i).getRoleId());
roleVO.setRoleName(roleList.get(i).getRoleName());
roleVO.setRoleDes(roleList.get(i).getRoleDes());
roleVO.setCreator(roleList.get(i).getCreator());
roleVO.setUpdator(roleList.get(i).getUpdator());
roleVO.setSystemId(roleList.get(i).getSystem().getSystemId());
roleVO.setSystemName(roleList.get(i).getSystem().getSystemName());
roleVO.setcTime(roleList.get(i).getcTime());
roleVO.setuTime(roleList.get(i).getuTime());
roleVO.setRoleTypeId(roleList.get(i).getRoleType().getRoleTypeId());
roleVO.setRoleTypeName(roleList.get(i).getRoleType().getRoleTypeName());
roleVOList.add(roleVO);
}
//因為對已ligerGrid 需要的json格式的數據要有Rows ,Total兩個字段 這里可以用map集合來做處理
Map<String, Object> map = new HashMap<>();
//Rows裝的是記錄數據集合
map.put("Rows", roleVOList);
//Rows裝的是總的記錄數
map.put("Total", totalCount);
//對數據做json格式轉換的處理
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());
jsonObject = JSONObject.fromObject(map, jsonConfig);
java.lang.System.out.println("jsonObject:" + jsonObject);
//{"Total":5,"Rows":[{"cTime":"2017-10-24 00:00:00","creator":123,"roleDes":"測試測試","roleId":33,"roleName":"測試1","roleTypeId":2,"roleTypeName":"技術類型","systemId":1,"systemName":"USM","uTime":"2017-10-24 00:00:00","updator":123}]}
}catch (Exception e){
e.printStackTrace();
}
return SUCCESS;
}
}
其實分頁排序與我們平時寫的分頁排序沒有太大的區別 唯一的就是現在用了前端框架,要將這些相關的字段在后台進行接收 然后傳到dao層做處理
千萬不要以為只要我后台action中的數據返回的格式是json格式,就可以在前台頁面中直接獲取到然后作顯示,那是不可能的。
前台能接收后台的json格式的數據需要做以下處理:
1.首先你的后台返回的json格式的數據要與你前台頁面ligerGrid進行顯示的字段內容相對應(ligerGrid的Rows與Total是在前台頁面進行數據展示需要的兩個字段,故后台也對應傳這兩個字段的json格式數據):如圖:

2.配置struts2返回的結果集視圖 設置type=json(我這里用的是struts2的框架 故以struts2框架舉例)
<action name="listAll*" class="{1}Action" method="listAll{1}">
<result type="json">
<param name="root">jsonObject</param>
</result>
</action>
3.設置對應action所在的package繼承自json-default
<package name="fums" namespace="/" extends="struts-default,json-default">
4.在后台action中將要返回的數據提供get方法
5.在struts.xml中設置返回數據的格式(見第2步中的代碼,即設置的<param>部分,這里返回的json格式的數據的名字叫
jsonObject,所以對其進行數據源過濾)
成功啦成功啦~~~~~~~~~~~~~~~~~~~~~~
然后也可以點擊上一頁下一頁進行分頁啦。。。。。截圖就不再展示了。。。。。

==========可愛滴分割線=============
后續所遇問題:
由於測試的時候發現了一個問題,首先我們在前台頁面指定按照systemId排序,每頁顯示pagesize為8,然后第一頁是可以正常顯示數據的,
但是當我們點擊下一頁進行切換的時候,問題就出來了,數據顯示不完整,如下圖,舉例說明:
在數據庫中的數據:

在頁面顯示的數據:

如果正常顯示的話,點擊下一頁,則頁面顯示的是數據庫中排序后的第二頁顯示數據,但是 現在 缺少了角色名為77的數據,並且角色名為aaa的數據重復了。
猜想是不是因為在前台點擊切換頁碼時,並沒有把排序字段發送到后台,(做了測試,在后台dao層里面直接寫死按照systemId排序,不接收來自前台頁面的
sortname字段數據,結果還是不行),經過測試,並不是因為因為排序字段的問題,猜想是不是點擊下一頁的時候調用的api是默認按照數據庫表主鍵進行排序的。
(不想去看api代碼了,就這樣吧,聽說ligerUI現在也沒有人進行維護了。。尷尬。。)問題待解決,目前只好沒有使用排序字段,直接采用默認的排序。
