由於還處於學習階段,因此用的框架是Struts2+Hibernate,javascript
查詢的方法是Hibernate自帶的方法,由於數據較少的緣故,因此設定每頁顯示兩條數據來實現css
1.dao 層Hibernate的分頁方法html
1 package com.hanqi.dao; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.hibernate.Session; 7 import org.hibernate.SessionFactory; 8 import org.hibernate.Transaction; 9 import org.hibernate.boot.registry.StandardServiceRegistryBuilder; 10 import org.hibernate.cfg.Configuration; 11 import org.hibernate.service.ServiceRegistry; 12 13 import com.hanqi.entity.Phoner; 14 15 public class PhonerDAO { 16 17 //定義變量 18 private Configuration cfg = null ; 19 private ServiceRegistry sr = null ; 20 private SessionFactory sf = null ; 21 private Session se = null ; 22 Transaction ts = null ; 23 List<Phoner> list = new ArrayList<>() ; 24 25 public PhonerDAO() { 26 //初始化Hibernate 27 cfg = new Configuration().configure() ; 28 29 sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build() ; 30 31 } 32 33 //配置加載 34 public void init() 35 { 36 sf = cfg.buildSessionFactory(sr) ; 37 38 se = sf.openSession() ; 39 40 ts = se.beginTransaction() ; 41 } 42 43 //提交事務並釋放資源 44 public void destory() 45 { 46 ts.commit() ; 47 48 se.close() ; 49 50 sf.close() ; 51 } 52 53 //分頁顯示全部聯繫人 54 public List<Phoner> getAll(int pages) 55 { 56 init() ; 57 58 list = se.createQuery("from Phoner")//HQL語句 59 .setMaxResults(2)//設置每頁顯示的行數 60 .setFirstResult((pages-1)*2)//設置起始頁 61 .list() ;//得到集合 62 63 destory(); 64 65 return list ; 66 } 67 68 69 }
2在service調用上述方法並傳遞一個頁碼參數java
1 package com.hanqi.service; 2 3 import java.util.List; 4 5 import com.hanqi.dao.PhonerDAO; 6 import com.hanqi.entity.Phoner; 7 8 public class PhonerService { 9 10 PhonerDAO pd = new PhonerDAO() ; 11 12 //分頁查詢 13 public List<Phoner> getAll(int pages) 14 { 15 return pd.getAll(pages) ; 16 } 17 18 }
3底層的代碼咱們已經寫完,接下來就是怎麼在網頁和struts.xml進行調用並顯示數據apache
這是第一個頁面,咱們讓它經過get方式攜帶一個頁碼參數(默認進去就顯示第一頁)app
<%@page import="com.hanqi.service.PhonerService"%> <%@page import="com.hanqi.entity.Phoner"%> <%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style type="text/css"> h3{text-shadow: 5px 5px 5px #FFF000 ;} </style> </head> <body> <% %> <!-- 這裏設置鏈接跳轉並攜帶參數傳遞到下一個頁面 --> <a href="selectPhoner.action?pages=1"><h3>查詢聯繫人</h3></a><br><br> </body> </html>
以後點擊查詢聯繫人,咱們經過struts.xml配置跳轉到顯示的頁面框架
首先要定義一個Action的類jsp
1 package com.hanqi.action; 2 3 import java.util.List; 4 5 import javax.servlet.http.HttpServletRequest; 6 7 import org.apache.struts2.ServletActionContext; 8 9 import com.hanqi.entity.Phoner; 10 import com.hanqi.service.PhonerService; 11 import com.opensymphony.xwork2.ActionSupport; 12 13 public class PhonerAction { 14 15 PhonerService ps = new PhonerService() ;//實例化 16 private String pages ; 17 18 public String getPages() { 19 return pages; 20 } 21 22 public void setPages(String pages) { 23 this.pages = pages; 24 } 25 26 public String selectPhoner() 27 { 28 String rtn = "fail" ; 29 30 try 31 { 32 HttpServletRequest hsr = ServletActionContext.getRequest() ;//獲取原生request 33 34 //獲取傳遞的參數 35 int pages = Integer.parseInt(hsr.getParameter("pages")) ; 36 37 List<Phoner> list = ps.getAll(pages); //調取service層方法 38 39 hsr.setAttribute("pages", pages); //覆蓋參數並從新傳遞回去 40 41 hsr.setAttribute("selectAll", list); //將獲取到的數據集合放入請求中 42 43 rtn = "success" ; 44 45 }catch(Exception e) 46 { 47 e.getStackTrace() ; 48 } 49 return rtn ; 50 } 51 }
struts.xml配置post
<action name="selectPhoner" class="com.hanqi.action.PhonerAction" method=" selectPhoner"> <result>/WEB-INF/pages/selectPhoner.jsp</result> </action>
顯示數據的jsp,這裏咱們作了個小小的判斷,由於咱們設置的每頁兩條數據,因此咱們獲得的集合的長度要麼0,要麼1,要麼2因此咱們能夠判斷頁碼的超出範圍學習
並控制彈窗,這裏又作了定時跳轉
1 <%@page import="com.hanqi.dao.PhonerDAO"%> 2 <%@page import="com.hanqi.service.PhonerService"%> 3 <%@page import="com.hanqi.entity.Phoner"%> 4 <%@page import="java.util.List"%> 5 <%@ page language="java" contentType="text/html; charset=UTF-8" 6 pageEncoding="UTF-8"%> 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 8 <html> 9 <head> 10 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11 <title>Insert title here</title> 12 <style type="text/css"> 13 *{ 14 margin:0 ; 15 padding:0; 16 } 17 table 18 { 19 height:150px; 20 width:600px; 21 border:#990 1px solid; 22 text-align:center; 23 margin:0 ; 24 border-radius:8px; 25 } 26 table tr 27 { 28 margin:0 ; 29 border:#990 1px solid; 30 cellpadding:0 ; 31 cellspacing:0 ; 32 } 33 table th 34 { 35 margin:0 ; 36 border:#990 1px solid; 37 cellpadding:0 ; 38 border:1 ; 39 } 40 table td 41 { 42 margin:0 ; 43 border:#990 1px solid; 44 cellpadding:0 ; 45 border:1 ; 46 } 47 </style> 48 </head> 49 <body> 50 <% 51 52 //定義變量,獲取父級網頁傳遞的參數 53 int pages = Integer.parseInt(request.getParameter("pages")) ; 54 55 //定義Phoner集合,並將從請求中獲取到的集合賦給此集合 56 List<Phoner> list = (List<Phoner>)request.getAttribute("selectAll") ; 57 58 //獲取記錄條數 59 List<Phoner> list1 = new PhonerDAO().getCount() ; 60 61 int account = list1.size() ; 62 63 int yeshu = 0 ; 64 65 if(account%2 == 0) 66 { 67 yeshu = account/2 ; 68 } 69 else 70 { 71 yeshu = (int)account/2 + 1 ; 72 } 73 %> 74 75 <table cellspacing="0" cellpadding="0"> 76 77 <tr> 78 <th>序號</th> 79 <th>姓名</th> 80 <th>電話</th> 81 <th>地址</th> 82 <th>備註</th> 83 </tr> 84 <% 85 //在表格中遍歷集合 86 for(Phoner p : list) 87 {%> 88 <tr> 89 <td><%=p.getXuhao() %></td> 90 <td><%=p.getName() %></td> 91 <td><%=p.getTelnum() %></td> 92 <td><%=p.getAddress() %></td> 93 <td><%=p.getRemart() %></td> 94 </tr> 95 <% 96 } 97 %> 98 </table> 99 <% 100 if(list.size() == 0) 101 {%> 102 <script type='text/javascript'>alert('頁碼超出範圍')</script> 103 <% 104 response.setHeader("refresh", "0;url=selectPhoner.action?pages=1");} 105 %> 106 <br> 107 共 <%=yeshu %> 頁 <%=account %> 條記錄 當前爲 <%=pages %> 頁 108 109 <a href="selectPhoner.action?pages=<%=pages-1 %>" >上一頁</a> 110 <a href="selectPhoner.action?pages=<%=pages+1 %>" >下一頁</a> 111 <form action="tiaoPhoner.action" method="post"> 112 跳到<input type="text" name="pages">頁 <input type="submit" value="跳轉" > 113 </form> 114 </body> 115 </html>
這時咱們須要的分頁就實現了
接下來就是輸入頁碼跳轉
首先仍是上面的jsp頁面,咱們加入跳轉的代碼,經過form表單進行提交數據
dao層的方法仍是沒有變直接調用就好,至於傳遞的頁碼參數則爲咱們輸入的參數,怎麼獲取呢?
先說struts.xml
1 <action name="tiaoPhoner" class="com.hanqi.action.PhonerAction" method="tiaoPhoner"> 2 3 <result>/WEB-INF/pages/selectPhoner.jsp</result> 4 5 </action>
接下來咱們在Action類中定義該方法
1 public String tiaoPhoner() 2 { 3 String rtn = "fail" ; 4 5 try 6 { 7 HttpServletRequest hsr = ServletActionContext.getRequest() ;//獲取原生request 8 9 //獲取傳遞的參數 10 try 11 { 12 int page = Integer.parseInt(pages) ; 13 14 System.out.println(page); 15 List<Phoner> list = ps.getAll(page); //調取service層方法 16 17 hsr.setAttribute("pages", page); //覆蓋參數並從新傳遞回去 18 19 hsr.setAttribute("selectAll", list); //將獲取到的數據集合放入請求中 20 21 }catch(Exception e) 22 { 23 e.getStackTrace(); 24 } 25 rtn = "success" ; 26 27 }catch(Exception e) 28 { 29 e.getStackTrace() ; 30 } 31 return rtn ; 32 }
service層的方法並無變,這時咱們就能夠進行頁面跳轉了
預覽圖:
這裏的共多少頁是經過獲取總記錄條數count計算出來的
由於每頁顯示兩條,因此咱們經過判斷count%2 == 0來獲得總的頁數(==0 頁數爲count/2,不然頁數爲(int)count/2+1)
查看頁面條數的dao層方法
1 //查詢有多少條記錄 2 public List<Phoner> getCount() 3 { 4 init() ; 5 6 list = se.createQuery("from Phoner").list() ; 7 8 destory(); 9 10 return list; 11 }
而後直接在頁面調用方法獲取集合,集合長度就是咱們要用到的count