java开发-Jquery.datatable控件

最近因为工作原因接触到了这个东西,看了不少教程,最后也算是慢慢出来了吧。记下来,有需要的人们带走吧。

其实我觉的学这个东西你应该从第一步开始看。


第一步:怎么让这个table显示出来再说!

前台页面一定要是这样结构的玩意:

<table id="table">
					<thead>
					</thead>
					<tbody>
					</tbody>
				</table>

其他样式什么的不管,但是一定得有thead,和tbody。之后导入他的js文件


加载这个页面之后,JS方法如下

$(document).ready(function() {
	oTable = $("#rable").dataTable({
		"sPaginationType" : "full_numbers",
		'bPaginate' : true, // 是否分页。
		"sZeroRecords" : "没有检索到数据",
		"sLoadingRecords" : "Loading...",
		"sProcessing" : "<img src='images/tables/load.gif' />",
		"bProcessing" : true, // 加载数据时显示正在加载信息
		"bServerSide" : true, // 指定从服务器端获取数据
		"fnServerData" : retrieveData,
		"oLanguage" : {//中文处理
			"sLengthMenu" : "<span class='showentries'>每页显示记录:</span> _MENU_ ",
			"sZeroRecords" : "<img src='images/tables/notfound.jpg' />",
			"sInfo" : "从 _START_ 到 _END_ /共 _TOTAL_ 条数据",
			"sInfoEmpty" : "没有数据",
			"sInfoFiltered" : "(从 _MAX_ 条数据中检索)",
			"oPaginate" : {
				"sFirst" : "首页",
				"sPrevious" : "前一页",
				"sNext" : "后一页",
				"sLast" : "尾页"
			}
		},
		"aoColumns" : [{//这个是table标题设置
					"sTitle" : "商品ID",
					"sClass" : "center"
				}, {
					"sTitle" : "商品标题",
					"sClass" : "center"
				}, {
					"sTitle" : "买家名称",
					"sClass" : "center"
				}, {
					"sTitle" : "操作",
					"sClass" : "center"
//					,
//					"fnRender" : function(obj) {//注释掉的这部分是应该是默认值。
//						return '<a href=\"Details/' + obj.aData[0]
//								+ '\">查看详情</a>  <input tag=\"' + obj.aData[0]
//								+ '\" type=\"checkbox\" name=\"name\" />';
//					}
				}]
	});
});

// 函数的参数是固定,不能更改。 结果,参数,调用方法
function retrieveData( sSource, aoData, fnCallback ) {     
//	for (var index = 0; index < aoData.length; index++) {//因为不知道这个aoData里面有什么,所以我就让它们显示出来看看
//		alert(aoData[index].name+"---"+aoData[index].value);
//	}
    $.ajax( {     
        type: "POST",      
        url: "/admin/getProductList",   
        dataType:"json",  
        data:"jsondata="+JSON.stringify(aoData), //传递到后台的参数,把aoData转成json传到后台到后台处理,这个里面有我们做排序和筛选的条件
        success: function(data) {   //成功后把按照他的规则反悔的信息fnCallback给这个table,让他自己去生成。
//           $("#url_sortdata").val(data.aaData);  
            fnCallback(data); //服务器端返回的对象的returnObject部分是要求的格式     
        }     
    });    
}  


后台代码如下:
	@SuppressWarnings("unused")
	@RequestMapping(value = "/getProductList")
	private @ResponseBody
	String getProductList(@ModelAttribute("pager") Pager pager,
			HttpServletRequest request, HttpServletResponse response,
			HttpSession session, ModelMap model,
			@RequestParam(value = "jsondata", defaultValue ="") String jsondata) {
		JSONArray jsonarray = JSONArray.fromObject(jsondata);//在这里把aoData传递的东西用jsonoArrayObject接受
		Datatable d=new Datatable();//这个是我的一个辅助类,处理aoData里面的参数的,我觉的放在这里面太乱了,额,强迫症伤不起有没有
		Datatable.fileDatatable(jsonarray, d);//处理aoData方法,一会贴上来。
		pager.setCurrentPage(d.getPage_Currpage());//因为要做分页,所以设置分页的基本信息,d.getPage_Currpage()也是在刚才的辅助类里的
		pager.setPageLimit(d.getPage_Pagelimit());//同上
		PageUtil<Product> pu=productSer.dTable(pager, d);//根据辅助类查询信息,一会也贴出来
		JSONArray jsonDataArray = new JSONArray();//得出结果反回信息
		for (Product p : pu.getDatas()) {
			JSONArray j1 = new JSONArray();//这是表格内的信息,按照顺序排列好的哟,亲~
			j1.add(p.getId());
			j1.add(p.getTitle());
			j1.add(p.getManame());
			j1.add("<a target='_left' href="+p.getUrl()+">前去查看</a> <a href='/admin/getProduct/"+p.getId()+"'>修改</a>");
			jsonDataArray.add(j1);
		}
		JSONObject returnjobj = new JSONObject();
		returnjobj.put("sEcho", d.getsEcho());//不知道有什么用。。呵呵
		returnjobj.put("iTotalRecords", pu.getMaxCount());//一共有多少个行
		returnjobj.put("iTotalDisplayRecords", pu.getMaxCount());//处理后有多少航、、、
		returnjobj.put("aaData", jsonDataArray);//咱们的那个表格内的信息
		return returnjobj.toString();//反回
	}


辅助类的代码:

import com.sun.org.apache.bcel.internal.generic.NEW;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * Jquery Datatable的辅助类
 * */
public class Datatable {
	private String sEcho; // 完全不知道是什么玩意
	private Integer page_Startclos; // 分页----开始的第一条记录
	private Integer page_Pagelimit; // 分页----每页显示数目
	private Integer page_Currpage; // 分页----显示第几页
	private String sort_Order; // 排序----顺序
	private String sort_Gist; // 排序----依据
	private String search_Gist; // 模糊查询----查询的条件

	public Integer getPage_Startclos() {
		return page_Startclos;
	}

	public void setPage_Startclos(Integer page_Startclos) {
		this.page_Startclos = page_Startclos;
	}

	public Integer getPage_Pagelimit() {
		return page_Pagelimit;
	}

	public void setPage_Pagelimit(Integer page_Pagelimit) {
		this.page_Pagelimit = page_Pagelimit;
	}

	public String getSearch_Gist() {
		return search_Gist;
	}

	public void setSearch_Gist(String search_Gist) {
		this.search_Gist = search_Gist;
	}

	public String getSort_Order() {
		return sort_Order;
	}

	public void setSort_Order(String sort_Order) {
		this.sort_Order = sort_Order;
	}

	public String getSort_Gist() {
		return sort_Gist;
	}

	public void setSort_Gist(String sort_Gist) {
		this.sort_Gist = sort_Gist;
	}

	public Integer getPage_Currpage() {//计算出是多少页
		return page_Startclos / page_Pagelimit + 1;
	}

	public void setPage_Currpage(Integer page_Currpage) {
		this.page_Currpage = page_Currpage;
	}

	public String getsEcho() {
		return sEcho;
	}

	public void setsEcho(String sEcho) {
		this.sEcho = sEcho;
	}

	public static void fileDatatable(JSONArray jsondata, Datatable dataTable) {
		String[] th = new String[4];//定义排序数组,
		th[0] = "id";
		th[1] = "title";
		th[2] = "maname";
		th[3] = "";
		JSONArray jsonarray = jsondata;
		String sEcho = "", iDisplayStart = "", iDisplayLength = "", sSearch = "", sOrder = "", sGist = "";
		for (int i = 0; i < jsonarray.size(); i++) {
			JSONObject obj = (JSONObject) jsonarray.get(i);
			if (obj.get("name").equals("sEcho")) {//获取JSON中的sEcho
				sEcho = obj.get("value").toString();
				dataTable.setsEcho(sEcho);
				continue;
			}
			if (obj.get("name").equals("iDisplayStart")) {//获取第一行~
				iDisplayStart = obj.get("value").toString();
				dataTable.setPage_Startclos(Integer.parseInt(iDisplayStart));
				continue;
			}
			if (obj.get("name").equals("iDisplayLength")) {//获取每页显示多少
				iDisplayLength = obj.get("value").toString();
				dataTable.setPage_Pagelimit(Integer.parseInt(iDisplayLength));
				continue;
			}
			if (obj.get("name").equals("sSearch")) {//模糊查询的字段
				sSearch = obj.get("value").toString();
				dataTable.setSearch_Gist(sSearch);
				continue;
			}
			if (obj.get("name").equals("sSortDir_0")) {//参与排序的字段,他会给按照标题的顺序  给你1.2.3.4…你要自己清楚第一个是什么字段,第二个是什么字段。自己去处理
				sOrder = obj.get("value").toString();
				dataTable.setSort_Order(sOrder);
				continue;
			}
			if (obj.get("name").equals("iSortCol_0")) {//正序还是倒叙
				sGist = obj.get("value").toString();
				dataTable.setSort_Gist(th[Integer.parseInt(sGist)]);
				continue;
			}
		}
	}
}


这样辅助类的完成,那么

	@Override
	public PageUtil<Product> dTable(Pager page, Datatable d) {
		String hql=" from Product where 1 = 1";
		//如果有搜索条件的话。
		if(d.getSearch_Gist()!=null&&!d.getSearch_Gist().equals("")){
			hql+=" and ( title like '%"+d.getSearch_Gist()+"%' " +
//					" or id like '%"+d.getSearch_Gist()+"%' " +
//					" or proid like '%"+d.getSearch_Gist()+"%' " +
//					"  or url like '%"+d.getSearch_Gist()+"%' " +
//					"  or maname like '%"+d.getSearch_Gist()+"%' " +
					" ) ";
		}
		//如果有排序条件
		if(d.getSort_Gist()!=null&&!d.getSort_Gist().equals("")){
			hql+=" order by "+d.getSort_Gist()+" ";
			if(d.getSort_Order()!=null&&!d.getSort_Order().equals("")){
				hql+=" "+d.getSort_Order();
			}else{
				hql+=" desc";
			}
		}else{
			hql+=" order by id desc ";
		}
		return super.find(page, hql, null);
	}


这样datatable妥妥的了~


很多东西都没有说的很明白,因为,额。。。我比较懒。。。你们可以在下面评论,,,,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值