基于jQuery ligerUI實(shí)現(xiàn)分頁樣式
在公司實(shí)習(xí)看到公司框架里使用了ligerUI的grid進(jìn)行分頁,個(gè)人感覺挺好用的,自己摸索著實(shí)現(xiàn)了一遍記錄下來
簡單來說,liger grid 就是提交準(zhǔn)備好的數(shù)據(jù)到指定的目標(biāo)請求數(shù)據(jù),拿到數(shù)據(jù)以后,顯示出來(通過ajax實(shí)現(xiàn))。
ligerGrid是ligerui系列插件的核心控件,用戶可以快速地創(chuàng)建一個(gè)美觀,而且功能強(qiáng)大的表格,支持排序、分頁、多表頭、固定列等等。
這里只實(shí)現(xiàn)基于ligerUI的分頁
LigerUI的分頁方式有兩種:local和server。
如果數(shù)據(jù)量不是很大,就直接采用local分頁,一次性的把數(shù)據(jù)全部發(fā)送到前臺(tái)來,之后LigerUI自身的grid會(huì)自動(dòng)分頁。說一下 total,在后臺(tái)傳送jsonString時(shí)傳送定義好的total(總條數(shù)),你可以定義多少都可以,但是到前臺(tái)它會(huì)自動(dòng)將總條數(shù)賦值給total, 這是local下的方式。
而如果數(shù)據(jù)量很大,一次性加載直接不顯示數(shù)據(jù)或反應(yīng)很慢的,就需要用server分頁了,當(dāng)用server分頁時(shí),每次請求都會(huì)比local時(shí)多發(fā)送兩個(gè)參數(shù):page和pagesize,不需要自己去發(fā)送,只需要在后臺(tái)獲取就行。
int page=Integer.parseInt(request.getParameter("page"));
int pagesize=Integer.parseInt(request.getParameter("pagesize"));
int total;
這時(shí)你可以把page和pagesize寫進(jìn)你的sql語句:
sql=".........";
sql+=" limit "+(page*pagesize-pagesize)+","+pagesize;
這樣查出的結(jié)果放入jsonString中,這里要注意total了,total需要自己定義,需要自己重新查一下結(jié)果的總條數(shù)后賦值給total傳到頁面,其他的LigerUI會(huì)幫你搞定!
關(guān)于更多的ligerUI grid參官網(wǎng)考API http://api.ligerui.com/?to=grid
關(guān)于選擇前端分頁還是后臺(tái)分頁參考http://www.dbjr.com.cn/article/86326.htm
local實(shí)現(xiàn)只需要將查詢的數(shù)據(jù)全部提交到前端框架會(huì)自動(dòng)幫你實(shí)現(xiàn)分頁,但是我個(gè)人并不提倡進(jìn)行客戶端分頁,Web應(yīng)用服務(wù)器和客戶端之間是網(wǎng)絡(luò),如果網(wǎng)絡(luò)傳遞的數(shù)據(jù)量越少,則客戶端獲得響應(yīng)的速度越快.而且一般來說,數(shù)據(jù)庫服務(wù)器和Web應(yīng)用服務(wù)器的處理能力一般比客戶端要強(qiáng)很多.從這兩點(diǎn)來看,在客戶端分頁的方案是最不可取的
下面上server端分頁代碼:
由于只使用了分頁所以只導(dǎo)入了部分插件和圖片
引入需要的jquery,liger和css
<link href="js/ligerui-all.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="js/jquery-3.0.0.js"></script> <script type="text/javascript" src="js/ligerui.all.js"></script>
jsp中樣例如下:在ligerGrid中需要指定dataAction(默認(rèn)是local),請求的url,page和pageSize,其中page和pageSize可以在后臺(tái)獲取
<script type="text/javascript" > $(function(){ var grid = $("#maingrid").ligerGrid({ columns: [ { name: 'id', display: '序號(hào)', render:function(record, rowindex, value, column){ return rowindex+1; } }, { name: 'title', display: '標(biāo)題'} ], height:210, dataAction:"server", url:"LUServlet", page:"1", pageSize:"5" }); }); </script> </head> <body> <div style="width:600px"> <div id="maingrid"></div> </div>
model類和測試數(shù)據(jù)庫
//為了省事用sql.Date import java.sql.Date; public class Blog { private int id; private int category_id; private String title; private String content; private Date created_time; //getter和setter方法 @Override public String toString() { return "Blog [id=" + id + ", category_id=" + category_id + ", title=" + title + ", content=" + content + ", created_time=" + created_time + "]"; } }
dao類,用jdbc測試
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import model.Blog; public class MysqlTest { PreparedStatement ps = null; ResultSet rs = null; Connection connect = null; public MysqlTest() { try { Class.forName("com.mysql.jdbc.Driver"); connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/blogs_stu", "root", ""); } catch (Exception e) { e.printStackTrace(); } } //返回一個(gè)Blog數(shù)組,用于拼接json字符串 //不用model時(shí)可以直接在此處拼接json字符串返回 //傳入page和pagesize用于判斷最后一頁數(shù)組長度,否則會(huì)報(bào)錯(cuò) public Blog[] getInfo(String sql,int page,int pagesize) { int total=getTotal(); if(page*pagesize>=total){ pagesize=total%pagesize; } Blog[] blog = new Blog[pagesize]; try { ps = connect.prepareStatement(sql); rs = ps.executeQuery(); int index=0; while (rs.next()) { blog[index]=new Blog(); blog[index].setId(rs.getInt("id")); blog[index].setCategory_id(rs.getInt("category_id")); blog[index].setTitle(rs.getString("title")); blog[index].setContent(rs.getString("content")); blog[index].setCreated_time(rs.getDate("created_time")); index++; } } catch (Exception e) { e.printStackTrace(); } finally { if (connect != null) try { connect.close(); ps.close(); rs.close(); } catch (SQLException e) { e.printStackTrace(); } } return blog; } //獲取總記錄數(shù)total public int getTotal(){ int total=0; String sql=""; try { sql="select count(id) from blog"; ps = connect.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ total=rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); } return total; } }
后臺(tái)servlet實(shí)現(xiàn)
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Blog; import mysqljdbc.MysqlTest; @WebServlet("/LUServlet") public class LUServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=utf-8"); //獲取頁面的page和pagesize,拼接sql用 int page=Integer.valueOf(request.getParameter("page")); int pagesize=Integer.valueOf(request.getParameter("pagesize")); MysqlTest test=new MysqlTest(); //在拼接json字符串是傳給前臺(tái)一個(gè)total記錄總數(shù),ligerUI grid會(huì)自動(dòng)獲取該total int total=test.getTotal(); request.setAttribute("total", total); //用的mysql,查找限定條數(shù)語句用limit,從page*pagesize-pagesize開始,取pagesize條 String sql="select * from blog"; sql+=" limit "+(page*pagesize-pagesize)+","+pagesize; Blog[] blog=test.getInfo(sql,page,pagesize); //將數(shù)據(jù)拼接成json字符串 StringBuffer strbuffer=new StringBuffer(); //ligerUI grid接受的json格式是{"Rows":[],"Total":""} strbuffer.append("{\"Rows\":["); for(int i=0;i<blog.length;i++){ strbuffer.append("{\"title\":").append("\"" + blog[i].getTitle() + "\"},"); } strbuffer.replace(strbuffer.length()-1, strbuffer.length(), ""); strbuffer.append("],").append("\"Total\":").append("\""+total+"\"").append("}"); PrintWriter out=response.getWriter(); out.write(strbuffer.toString()); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
運(yùn)行結(jié)果(默認(rèn)樣式可以改,具體參照ligerUI API):
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jquery使整個(gè)div區(qū)域可以點(diǎn)擊的方法
這篇文章主要介紹了jquery使整個(gè)div區(qū)域可以點(diǎn)擊的方法,涉及jQuery操作頁面元素與鼠標(biāo)事件的技巧,需要的朋友可以參考下2015-06-06jquery動(dòng)態(tài)加載圖片數(shù)據(jù)練習(xí)代碼
這里我只是隨便做了下,上面是照片列表和兩個(gè)按鈕,單擊小圖片下面顯示大圖片,當(dāng)點(diǎn)擊按鈕時(shí)可以查看下一頁,上一頁的圖片。2011-08-08jQuery?獲取與設(shè)置元素屬性的詳細(xì)方法(看完這篇文章就搞明白了)
這篇文章帶領(lǐng)大家熟練掌握?jQuery?的屬性方面的操作,包括固有屬性的獲取與設(shè)置,自定義屬性的獲取與設(shè)置等等,走進(jìn)?jQuery?的更深層次階段,這也是腳本之家小編發(fā)現(xiàn)的一篇比較實(shí)用的文章2023-06-06jQuery實(shí)現(xiàn)Ajax聊天機(jī)器人完成案例
從微信開發(fā)的時(shí)候,有了一個(gè)與人對話的機(jī)器人之后,本文主要實(shí)現(xiàn)jQuery實(shí)現(xiàn)Ajax聊天機(jī)器人完成案例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11JQuery實(shí)現(xiàn)當(dāng)鼠標(biāo)停留在某區(qū)域3秒后自動(dòng)執(zhí)行
這篇文章主要介紹了JQuery實(shí)現(xiàn)當(dāng)鼠標(biāo)停留在某區(qū)域3秒后自動(dòng)執(zhí)行,可以應(yīng)用于很多場景,需要的朋友可以參考下2014-09-09jQuery實(shí)現(xiàn)個(gè)性翻牌效果導(dǎo)航菜單的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)個(gè)性翻牌效果導(dǎo)航菜單的方法,實(shí)例分析了jQuery操作animate、css及鼠標(biāo)事件的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03