Spring+Datatables分頁

在做項目的過程中,在開發前端中,很多js代碼都是自己寫的,雖然jquery給我提供了很大的便利,但是依然無法提高代碼的效率。特別是前端列表這塊,相比較而言是比較複雜的,這段時間內,自己想網上面有沒有這方面插件。找了一下,發現不少,其中就有Datatables,他是基於jquery的。而且是純js和CSS的代碼,比較方便。看了datatables的官網,發現對PHP支持比較好,java的例子不多。我研究半天,加上借鑑別人的一些代碼和思路。自己先寫了一個簡單的Spring+Datatables分頁。比較簡單。主要我分這幾個部分。
1、主頁:datatable.jsp。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="/common/jsp/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--第一步:引入Javascript / CSS (CDN)-->
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.15/css/jquery.dataTables.css">

<!-- jQuery -->
<script type="text/javascript" charset="utf8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<!-- DataTables -->
<script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.15/js/jquery.dataTables.js"></script>
<title>Insert title here</title>
</head>
<body class="dt-example">


    <div>
        <input type="text" id="level1"> 
        <input type="button" onclick="search1()"  value="查詢">
    </div>

    <table id="example" class="display" cellspacing="0" width="100%">
        <thead>
            <tr>
                <th>名字</th>
                <th>編號</th>
                <th>小尾巴</th>
                <th>操作</th>
            </tr>
        </thead>
    </table>
</body>
<script type="text/javascript">
$(document).ready(function() {
    table = $('#example').DataTable( {
        "pagingType": "simple_numbers",//設置分頁控件的模式
         searching: false,//屏蔽datatales的查詢框
         aLengthMenu:[2],//設置一頁展示10條記錄
         "bLengthChange": false,//屏蔽tables的一頁展示多少條記錄的下拉列表
         "oLanguage": {  //對錶格國際化,添加各種樣式
            "sLengthMenu": "每頁顯示 _MENU_條",  
            "sZeroRecords": "沒有找到符合條件的數據",  
            "sProcessing": "正在玩命加載中。。。。。。",   
            "sInfo": "當前第 _START_ - _END_ 條 共計 _TOTAL_ 條",  
            "sInfoEmpty": "木有記錄",  
            "sInfoFiltered": "(從 _MAX_ 條記錄中過濾)",  
            "sSearch": "搜索:",  
            "oPaginate": {  
            "sFirst": "首頁",  
            "sPrevious": "前一頁",  
            "sNext": "下一頁",  
            "sLast": "尾頁"  

            }  
        },
       "processing": true, //打開數據加載時的等待效果
        "serverSide": true,//打開後臺分頁
        "ajax": {
            "url": "${ctx}/users/findByPage", 
            "dataSrc": "aaData", 
            "data": function ( d ) {
                var level1 = $('#level1').val();
                //添加額外的參數傳給服務器
                d.extra_search = level1;
            }
        },
        "columns": [
            { "data": "roleid" },
            { "data": "userid" },
            { "data": "password" },


        ],
        "columnDefs" : [ {
            // 定義操作列,######以下是重點########
            "targets" : 3,//操作按鈕目標列
            "data" : null,
            "render" : function(data, type,row) {
            var id = '"' + row.level + '"';
            var html = "<a href='javascript:void(0);'  class='delete btn btn-default btn-xs'  ><i class='fa fa-times'></i> 查看</a>"
            html += "<a href='javascript:void(0);' class='up btn btn-default btn-xs'><i class='fa fa-arrow-up'></i> 編輯</a>"
            html += "<a href='javascript:void(0);'   onclick='deleteThisRowPapser("+ id + ")'  class='down btn btn-default btn-xs'><i class='fa fa-arrow-down'></i> 刪除</a>"
            return html;
            }
            } ],

    });
} );

function search1()
{
    table.ajax.reload();
}

function deleteThisRowPapser(id){
    alert("刪除==="+id)
}
</script>

</html>

2、spring裏面的Controller層,Service層我就不貼,只是常規的sql。

package com.iuweb.demo.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.iuweb.common.controller.BaseController;
import com.iuweb.common.model.Page;
import com.iuweb.common.model.Pagination;
import com.iuweb.demo.model.DataTableMode;
import com.iuweb.demo.model.DatatablesViewPage;
import com.iuweb.demo.model.Users;
import com.iuweb.demo.service.UsersService;
import com.iuweb.user.model.User;
@Controller
@RequestMapping(value = "/users")
@Scope("prototype")
public class UsersController extends BaseController{ 
    private static final Logger logger = Logger.getLogger(UsersController.class);
    @Resource
    private UsersService usersService;

    /**
     * DataTable的分頁查詢Demo
     * 
     * @author wangguan,
     * @date 2017年10月13日 上午9:44:55,
     * @version argType
     */
    @RequestMapping(value = "/findByPage")
    @ResponseBody
    public DatatablesViewPage<Users>  findByPage(HttpServletRequest request,
            @RequestParam(value = "length", defaultValue = "3", required = false) int pageSize,
            @RequestParam(value = "start", defaultValue = "0", required = false) int pagec) {
        DatatablesViewPage<Users> view = new DatatablesViewPage<Users>();
        Map params = super.inputParams(request);
        /*// 獲取前臺額外傳遞過來的查詢條件
        String extra_search = request.getParameter("extra_search");*/
        int currentPage=(pagec/pageSize)+1;
        Pagination pagination = new Pagination(pageSize, currentPage);
        params.put("pagination", pagination);
        List<Users> list = usersService.getAll(params);
        /*Page page = new Page();
        page.setCount(pagination.getCount());
        page.setData(list);*/
        /*// 隨便組織的查詢結果
        List<DataTableMode> list = new ArrayList<DataTableMode>();
        for (int i = 0; i < 22; i++) {
            DataTableMode alarm = new DataTableMode();
            alarm.setLevel(i);
            alarm.setTotal(100L);
            alarm.setLast_name("我的" + i + "號小尾巴");
            list.add(alarm);
            list.add(alarm);
        }*/
        view.setiTotalDisplayRecords(pagination.getCount());
        view.setiTotalRecords(pagination.getCount());
        view.setAaData(list);
        return view;

    }


}

3、DatatablesViewPage.java

package com.iuweb.demo.model;

import java.util.List;

public class DatatablesViewPage<T> {
     private List<T> aaData; //aaData 與datatales 加載的“dataSrc"對應
        private int iTotalDisplayRecords; 
        private int iTotalRecords;
        public DatatablesViewPage() {

        }
        public List<T> getAaData() {
            return aaData;
        }
        public void setAaData(List<T> aaData) {
            this.aaData = aaData;
        }
        public int getiTotalDisplayRecords() {
            return iTotalDisplayRecords;
        }
        public void setiTotalDisplayRecords(int iTotalDisplayRecords) {
            this.iTotalDisplayRecords = iTotalDisplayRecords;
        }
        public int getiTotalRecords() {
            return iTotalRecords;
        }
        public void setiTotalRecords(int iTotalRecords) {
            this.iTotalRecords = iTotalRecords;
        }


}

4、BaseController.java

/**
 * @(#)BaseAction.java Copyright 2016 Magingunion, Inc. All rights reserved.
 */
package com.iuweb.common.controller;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;



public abstract class BaseController {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected Map inputParams(HttpServletRequest request) {
        Map params = new HashMap();
        Map<String, String[]> map = request.getParameterMap();
        Set<Entry<String, String[]>> set = map.entrySet();
        Iterator<Entry<String, String[]>> it = set.iterator();
        while (it.hasNext()) {
            Entry<String, String[]> entry = it.next();
            for (String i : entry.getValue()) {
                if (StringUtils.isNotEmpty(i)) {
                    if (params.containsKey(entry.getKey())) {
                        i = i + ',' + params.get(entry.getKey());
                        params.put(entry.getKey(), i);
                    } else {
                        params.put(entry.getKey(), i);
                    }
                }
            }
        }
        return params;
    }

}

5、Users.java

/**
 * @(#)Users.java Copyright 2016 Magingunion, Inc. All rights reserved.
 */
package com.iuweb.demo.model;

import com.iuweb.common.model.BaseModel;

public class Users extends BaseModel {
    private String userId;
    private String password;
    private String userName;
    private String roleId;
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getRoleId() {
        return roleId;
    }
    public void setRoleId(String roleId) {
        this.roleId = roleId;
    }

}

好了 ,基本的代碼就結束了,官網有更多的例子和說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章