OK,上次完成了客户端的分页,这次我们就在上一次的Demo上进行修改,来实现服务端的分页~
js代码:
开启服务器处理模式,这时我们对表格的每次操作,datatable都会帮我们向服务器发起请求获取数据,默认是用GET方式传递参数,所以我们下面加上了”fnServerData”,这样可以修改参数传递的方式为POST,那么到底给服务端发送的”aoData”是个什么鬼呢,别急,我们直接从Servlet取出来看看就知道了 此时我们的Servlet也要做一点修改:
- */
private static final long serialVersionUID = 5957315496919679612L;
@Override
protected void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
// 编码设置
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
// 把传送过来的JSON字符串转成JSON数组
JSONArray ja = JSONArray.fromObject(request.getParameter("aodata"));
System.out.println(ja);
// 从数据库获取数据
List
// 数据封装并返回给客户端
DataTableJSONResponse dtjs = new DataTableJSONResponse(listUser);
JSONObject jsonObject = JSONObject.fromObject(dtjs);
response.getWriter().print(jsonObject.toString());
}
此时我们运行一下,OK,发现所谓的参数长这个模样
是不是感觉有点晦涩难懂,于是本菜上网查了下,勉强是看懂这个鬼东西,接下来就讲解一下几个我们需要的参数: sEcho:客户端发送请求同时发送过来的一个标识,虽然有什么卵用不知道,不过我们服务端返回的数据中必须带有这个标识,哦,官网的文档里说,服务端取出标识最好转一下转成int,防止XXS攻击(懵逼,暂且不管,我们只知道需要这个就行) iColumns:列数 iDisplayStart:起始索引 iDisplayLength:显示的行数 {“name”:”mDataProp_0”, {“name”:”sSearch_0”, {“name”:”bRegex_0”, {“name”:”bSearchable_0”, {“name”:”bSortable_0”,”value”:true}
每一列的参数设置,_0即是第一列,这个我们不管,到下面也是提取列名而已 sSearch:全局搜索字段 iSortCol_0:被排序的列 sSortDir_0:排序方式
完成了参数解读,那么接下来就要提取我们的参数啦~~开工加代码
<div class="jb51code">
<pre class="brush:java;">
public class Action extends HttpServlet {
/**
- */
private static final long serialVersionUID = 5957315496919679612L;
@Override
protected void service(HttpServletRequest request,IOException {
// 编码设置
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
// 把传送过来的JSON字符串转成JSON数组
JSONArray ja = JSONArray.fromObject(request.getParameter("aodata"));
System.out.println(ja);
// 获取需要的参数值
String sEcho = null;
Integer iColumns = null;
Integer iDisplayStart = null;
Integer iDisplayLength = null;
List
String sSearch = null;
Integer iSortCol_0 = null;
String iSortCol = null;
String sSortDir_0 = null;
for (int i = 0; i < ja.size(); i++) {
if (ja.getJSONObject(i).getString("name").equals("sEcho"))
sEcho = ja.getJSONObject(i).getString("value");
else if (ja.getJSONObject(i).getString("name").equals("iColumns"))
iColumns = Integer.valueOf(ja.getJSONObject(i).getString("value"));
else if (ja.getJSONObject(i).getString("name").equals("iDisplayStart"))
iDisplayStart = Integer.valueOf(ja.getJSONObject(i).getString("value"));
else if (ja.getJSONObject(i).getString("name").equals("iDisplayLength"))
iDisplayLength = Integer.valueOf(ja.getJSONObject(i).getString("value"));
else if (ja.getJSONObject(i).getString("name").equals("sSearch"))
sSearch = ja.getJSONObject(i).getString("value");
else if (ja.getJSONObject(i).getString("name").equals("iSortCol_0"))
iSortCol_0 = Integer.valueOf(ja.getJSONObject(i).getString("value"));
else if (ja.getJSONObject(i).getString("name").equals("sSortDir_0"))
sSortDir0 = ja.getJSONObject(i).getString("value");
else if (iColumns != null) {
for (int j = 0; j < iColumns; j++)
if (ja.getJSONObject(i).getString("name").equals("mDataProp" + j))
mDataProp.add(ja.getJSONObject(i).getString("value"));
}
}
iSortCol = mDataProp.get(iSortCol_0);
System.out.println(sEcho);
System.out.println(iColumns);
System.out.println(iDisplayStart);
System.out.println(iDisplayLength);
System.out.println(sSearch);
System.out.println(iSortCol);
System.out.println(sSortDir_0);
// 从数据库获取数据
List
// 数据封装并返回给客户端
DataTableJSONResponse dtjs = new DataTableJSONResponse(listUser);
JSONObject jsonObject = JSONObject.fromObject(dtjs);
response.getWriter().print(jsonObject.toString());
}