我在网上找到的关于 JQuery DataTables JS 插件动态分页的例子比较少,我正好也用到了这个功能,希望对大家有帮助。
写的不好,多指点。
上代码
<link href="<%=basePath%>common/plugins/datatables/dataTables.bootstrap.css" rel="stylesheet" type="text/css" />
<script src="<%=basePath%>common/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="<%=basePath%>common/plugins/datatables/jquery.dataTables.js" type="text/javascript"></script>
<script src="<%=basePath%>common/plugins/datatables/dataTables.bootstrap.js" type="text/javascript"></script>
$(function () {
$("#example2").dataTable({
"bLengthChange": false,
"bFilter": false,
"bSort": false,
"bInfo": true,
"bProcessing": true, // 加载条
"iDisplayLength": 10,
"bProcessing": false, // 是否显示取数据时的那个等待提示
"bServerSide": true,//这个用来指明是通过服务端来取数据
"sAjaxSource": <%=basePath%>admin/pushmessages/msglist",//这个是请求的地址
"fnServerData": retrieveData, // 获取数据的处理函数
"oLanguage": {
"sProcessing": "正在加载中......",
"sLengthMenu": "每页显示 _MENU_ 条记录",
"sZeroRecords": "对不起,查询不到相关数据!",
"sEmptyTable": "表中无数据存在!",
"sInfo": "当前显示 _START_ 到 _END_ 条,共 _TOTAL_ 条记录",
"sInfoFiltered": "数据表中共为 _MAX_ 条记录",
"oPaginate": {
"sFirst": "首页",
"sPrevious": "上一页",
"sNext": "下一页",
"sLast": "末页",
},
},
});
});
// 3个参数的名字可以随便命名,但必须是3个参数,少一个都不行
function retrieveData(sSource, aoData, fnCallback ) {
$.ajax({
url : sSource,//这个就是请求地址对应sAjaxSource
data : {"aoData":JSON.stringify(aoData)},//这个是把datatable的一些基本数据传给后台,比如起始位置,每页显示的行数
type : 'post',
dataType : 'json',
async : false,
success : function(result) {
fnCallback(result);//把返回的数据传给这个方法就可以了,datatable会自动绑定数据的
},
error : function(msg) {
}
});
}
<div class="box-body">
<table id="msgtable" class="table table-bordered table-striped table-hover">
<thead>
<tr>
<th>标题</th>
<th>内容</th>
<th>推送时间</th>
<th>推送方式</th>
<th>推送者</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
以上就是前台部分
Spring Action
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@RequestMapping(value = "/msglist", method = RequestMethod.POST)
@ResponseBody
public String msgList(@RequestParam String aoData,HttpServletRequest request) {
JSONArray jsonarray = JSONArray.fromObject(aoData);
String sEcho = null;
int iDisplayStart = 0; // 起始索引
int iDisplayLength = 0; // 每页显示的行数
for (int i = 0; i < jsonarray.size(); i++) {
JSONObject obj = (JSONObject) jsonarray.get(i);
if (obj.get("name").equals("sEcho"))
sEcho = obj.get("value").toString();
if (obj.get("name").equals("iDisplayStart"))
iDisplayStart = obj.getInt("value");
if (obj.get("name").equals("iDisplayLength"))
iDisplayLength = obj.getInt("value");
}
Integer conut = pushMessagesService.count(" 1=:id ", 1);
JSONObject getObj = new JSONObject();
getObj.put("sEcho", sEcho);// 不知道这个值有什么用,有知道的请告知一下
getObj.put("iTotalRecords", conut);//实际的行数
getObj.put("iTotalDisplayRecords", conut);//显示的行数,这个要和上面写的一样
getObj.put("aaData", pushMessagesService.getPMsgListTable(iDisplayStart, iDisplayLength));//要以JSON格式返回
return getObj.toString();
}
service
public List<String[]> getPMsgListTable(Integer pageIndex, Integer pageSize ){
List<PushMessages> list = pushMessagesDao.getUserListTable(pageIndex, pageSize);
ArrayList<String[]> lists = new ArrayList<String[]>();
for (int i = 0; i < list.size(); i++) {
lists.add(list.get(i).toStringArray());
}
return lists;
}
bean
@Entity
@Table
public class PushMessages implements Serializable{
private static final long serialVersionUID = -7569928120760123739L;
private Integer id;
private String title; // 标题
private String content; // 内容 72个字
private Integer type; // 0:所以平台 ,1:ios,2:android
private String sendtime;
private Integer user_id;
private String user_name;
getr setr ....
public String[] toStringArray() {
//<button class="btn btn-block btn-primary disabled btn-sm">支付宝</button>
StringBuffer button = new StringBuffer("<button class='btn disabled btn-sm ");
if (type == 0)
button.append("btn-primary'>全平台");
if (type == 1)
button.append("btn-warning'>IOS");
if (type == 2)
button.append("btn-success'>Android");
button.append("</button>");
String [] str ={title,content,sendtime,button.toString(),user_name};
return str;
}
}
返回到 jquery datatables 的数据格式 是一个 String [] 数组, 所以我在 这个 bean 里面写了一个 toStringArray() 方法 拼接成 String 数组 同时也把 html 代码拼接在 里面
可以用firedub 看下数据返回的格式。
还有一点,html 有多少列 返回的数据 也要有多少列。
希望各位大神指点。