jQuery datatables使用 ( 封装类实现前台分页 二 续...)

封装的公用分页的工具类:

packagecom.sintai.util;

importjava.util.ArrayList;

importjava.util.List;

publicclassPageUtil<T>{

//分页静态不变属性

publicstaticfinalStringSIZE="size";//每页显示的记录数

publicstaticfinalStringCURPAGE="curPage";//总页数

privatelongtotal;

privateList<T>data=newArrayList<T>();

//省略setget方法

@Override

publicStringtoString(){

return"PageUtil[data="+data+",total="+total+"]";

}

}

后台Action:

/**

*分页时每页跨度数量

*/

privateStringparm_iDisplayStart;

/**

*DataTable请求服务器端次数

*/

privateStringparm_sEcho;

/**

*数组的数组,表格中的实际数据.

*/

privateString[][]aaData;

/**

*给前台的数据

*/

privateDataTableReturnObjecttableReturnObject=null;

/**

*传参

*/

privateStringparm_name;

//省略了getset方法

@Action("/findAllSite")

publicStringfindAllSite(){

List<SiteManagement>siteListPage=null;

inttotle=0;

try{

Map<String,Object>params=newHashMap<String,Object>();

intri=Integer.parseInt(parm_iDisplayStart);

intcup=(int)(ri/10)+1;

params.put(PageUtil.CURPAGE,cup);

params.put(PageUtil.SIZE,10);

PageUtil<SiteManagement>pageUtil=siteManagementManager.queryByPager(params,parm_name);

siteListPage=pageUtil.getData();

totle=(int)pageUtil.getTotal();

}catch(Exceptione){

e.printStackTrace();

return"updateUserERROR";

}

//resultArr数组封装了页面要显示的数据以及页面显示数据的各种格式

String[][]resultArr=newString[siteListPage.size()][];

for(inti=0;i<resultArr.length;i++){

String[]resultOne=newString[4];

SiteManagementsite=siteListPage.get(i);

intoID=site.getSiteManagementID();

resultOne[0]="<inputtype='checkbox'name='organizationId'value='"+oID+"'onclick='sOrgaId("+i+")'/>";

resultOne[1]=site.getSiteName();

resultOne[2]=site.getSiteTel();

resultOne[3]=site.getSiteFax();

resultArr[i]=resultOne;

}

aaData=resultArr;

tableReturnObject=newDataTableReturnObject(totle,totle,parm_sEcho,aaData);

return"ajax";

}

前台分页显示页面:

<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>

<%@taglibprefix="s"uri="/struts-tags"%>

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

<html>

<head>

<title>机构设置</title>

<metahttp-equiv="pragma"content="no-cache">

<metahttp-equiv="cache-control"content="no-cache">

<metahttp-equiv="expires"content="0">

<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">

<metahttp-equiv="description"content="Thisismypage">

<%@includefile="../taglibs.jsp"%>

<scripttype="text/javascript"src="${ctx}/js/common/selectFun.js"></script>

<!—需要引入的固定样式和js文件-->

<linkrel="stylesheet"type="text/css"href="${ctx}/css/common/dialog.css">

<linkhref="${ctx}/css/common/style1.css"style="text/css"rel="stylesheet">

<linkrel="stylesheet"href="${ctx}/css/dataTables/demo_page.css"type="text/css"/>

<linkrel="stylesheet"href="${ctx}/css/dataTables/demo_table.css"type="text/css"/>

<scripttype="text/javascript"language="javascript"src="${ctx}/js/dataTables/jquery.dataTables.js"></script>

</head>

<body>

<!--显示区域-->

<fieldset>

<legend>机构管理</legend>

<formclass="feildsetclearfixdataForm">

<tableclass="gridtable"style="width:100%"id="organizationTable">

<thead><tr>

<thwidth="10%"align="center">

<inputtype="checkbox"/>

</th>

<thwidth="30%"align="center">机构名称</th>

<thwidth="30%"align="center">电话号码</th>

<thwidth="30%"align="center">传真</th>

</tr>

</thead>

<tbodyalign="center">

<!—自动接收后台数据,按规定格式显示-->

</tbody>

</table>

</form>

</fieldset>

</body>

<scripttype="text/javascript">

varsAjaxSource="findAllSite.action";

varaoColumns=[//设定各列宽度

{"sWidth":"10%"},

{"sWidth":"30%"},

{"sWidth":"30%"},

{"sWidth":"30%"}

];

variDisplayLength=10;

vartableid="#organizationTable";

varoTable;

/**

*后台分页

*/

functionretrieveData(sSource,aoData,fnCallback){

aoData.push({"name":"name","value":$("input[name='siteName']").val()});

for(vari=0;i<aoData.length;i++){

//alert(aoData[i].name);

aoData[i].name="parm_"+aoData[i].name.toString();

}

$.ajax({

type:"post",

dataType:'json',//接受数据格式

cache:false,

data:aoData,

url:sSource,

beforeSend:function(XMLHttpRequest){

//ShowLoading();

},

success:function(data,textStatus){

if(data.tableReturnObject.aaData==""){

alert("无相关数据,请刷新");

}

fnCallback(data.tableReturnObject);

},

complete:function(XMLHttpRequest,textStatus){

//HideLoading();

},

error:function(){

//请求出错处理

alert("error");

}

});

}

//“检索”按钮的处理函数

functionsearch(){

if(oTable==null){//仅第一次检索时初始化Datatable

oTable=$(tableId).dataTable({

"bAutoWidth":false,//不自动计算列宽度

"aoColumns":aoColumns,

"bSort":false,

"bProcessing":true,//加载数据时显示正在加载信息

"bServerSide":true,//指定从服务器端获取数据

"bFilter":false,//不使用过滤功能

"bLengthChange":false,//用户不可改变每页显示数量

"iDisplayLength":iDisplayLength,//每页显示10条数据

"sAjaxSource":sAjaxSource,

"fnServerData":retrieveData,//获取数据的处理函数

"sPaginationType":"full_numbers",//翻页界面类型

"headerClickable":false,

"sortable":false

});

}

}

search();

functionbtnSelect(){

$(".paginate_active").click();

}

</script></html>

完善:

DataTableReturnObject对象具体封装的是需要返回的数据,封装的具体属性如下publicclassDataTableReturnObject{

privatelongiTotalRecords;

privatelongiTotalDisplayRecords;

privateStringsEcho;

privateString[][]aaData;

publicDataTableReturnObject(longtotalRecords,longtotalDisplayRecords,

Stringecho,String[][]d){

this.iTotalRecords=totalRecords;

this.iTotalDisplayRecords=totalDisplayRecords;

this.sEcho=echo;

this.aaData=d;

}

publiclonggetiTotalRecords(){

returniTotalRecords;

}

publicvoidsetiTotalRecords(longiTotalRecords){

this.iTotalRecords=iTotalRecords;

}

publiclonggetiTotalDisplayRecords(){

returniTotalDisplayRecords;

}

publicvoidsetiTotalDisplayRecords(longiTotalDisplayRecords){

this.iTotalDisplayRecords=iTotalDisplayRecords;

}

publicStringgetsEcho(){

returnsEcho;

}

publicvoidsetsEcho(StringsEcho){

this.sEcho=sEcho;

}

publicString[][]getAaData(){

returnaaData;

}

publicvoidsetAaData(String[][]aaData){

this.aaData=aaData;

}

}

Jquery的dataTables分页:

实现的是页面分页,在后台查询每页现实的记录,直接在页面上显示当前页的信息,所以把分页方法封装成了PageUtil类,重复使用;页面要显示的数据以及页面显示数据的输出格式甚至是添加的onclick事件等都是在后台设置完成的,页面上只需要写空的<tbody>标签体自动载入后台传过来的将要显示的数据;

注:

Jquery的dataTables分页有自动的分页标签和页面样式,只需要引入就ok需要注意的是table标签的id值还有<thead>和<tbody>标签,此案例是按页数查,显示到前台页面上的值是在后台action里查出来本页之后的list,action里查出来的是当前页要显示的那部分数据

相关推荐