Hibernate中的分頁(從jsp頁面到Action以及後臺的HQL)
阿新 • • 發佈:2019-02-08
話不多說了,直接上原始碼:
<SCRIPT type="text/javascript"> function frontPageCheck() { if(${page > 1}) { return true; } return false; } function backPageCheck() { if(${page < allPage}) { return true; } return false; } </SCRIPT>
以上這段程式碼是對分頁引數所做的js驗證,防止出現負頁數或者不存在的頁數!具體引數的意思請參見Action對各個引數的定義(下面會給出)
以上這段程式碼是對超連結中連線引數的設定,同理具體引數含義請參見下面的struts.xml配置檔案和Action中定義<div class="pager"> <center> 總共有${allPage}頁, 當前是第${page}頁 <a href="${basePath}findAdmin?page=1"><font size="2" color="blue">首頁</font> </a> <a href="${basePath}findAdmin?page=${page-1}" onclick="return frontPageCheck();"><font size="2" color="red">上一頁</font> </a> <a href="${basePath}findAdmin?page=${page+1}" onclick="return backPageCheck();"><font size="2" color="red">下一頁</font> </a> <a href="${basePath}findAdmin?page=${allPage}"><font size="2" color="blue">末頁</font> </a> </center> </div>
public class AdminAction { private AdminService adminService; …… /** 總共有多少頁 */ private int allPage; /** 頁面大小 */ private int pageSize = 3; /** 記錄總數 */ private int allRows; /** 當前頁面數, 預設為1 */ private int page = 1; /** 第一條記錄的索引 */ private int offset; …… /** * 分頁查詢Admin * * @return 查詢成功返回success,否則返回error * @throws Exception */ public String findAdmin() throws Exception { allRows = adminService.findRows(); offset = (page - 1) * pageSize; if (allRows % pageSize == 0) { allPage = allRows / pageSize; } else { allPage = allRows / pageSize + 1; } admins = adminService.getListForPage(offset, pageSize); if (admins != null) { return ActionSupport.SUCCESS; } return ActionSupport.ERROR; } }
以上這段是對Action的定義,相信到這裡大家有點明白了吧!
為了一看究竟,還是再來看看adminService裡面是怎麼寫的吧
public int findRows() {
return adminDAO
.findRows("select count(*) from Admin a group by a.adminNum");
}
public List<Admin> getListForPage(int offset, int pageSize) {
return adminDAO.getListForPage("from Admin a order by a.adminNum asc",
offset, pageSize);
}
繼續看看adminDAO中的寫法:
public List<Admin> getListForPage(final String hql, final int offset,
final int lengh) {
log.debug("finding ListForPage");
try {
List list = getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
List list2 = session.createQuery(hql)
.setFirstResult(offset)
.setMaxResults(lengh).list();
return list2;
}
});
return list;
} catch (RuntimeException re) {
log.error("find ListForPage failed", re);
throw re;
}
}
這一步比較重要,因為不經常用到
public int findRows(String hql) {
return getHibernateTemplate().find(hql).size();
}
好了,現在就剩下struts.xml檔案沒有說明了,我覺得還需要說明一下:
<!--有關管理員操作的所有Action -->
<package name="zyc_admin" extends="struts-default" namespace="/admin">
……
<!-- 查詢管理員 -->
<action name="findAdmin" class="edu.nwsuaf.information.action.AdminAction" method="findAdmin">
<result name="success">/admin/indexAdmin.jsp</result>
<result name="error">/error.jsp</result>
</action>
……
</package>
那麼最初的連結呢?
<a href="<s:url namespace='/admin' action='findAdmin?page=1'></s:url>" target="main">管理員管理</a>
試試吧,是不是比較容易的?祝你好運!