5.目前的*DaoHibernate.java中,並未有針對分頁來實作的程式,所以我們要先加入這些部份,先在UserDaoHibernate.java中,新增分新的程式,其中接受的參數是ExtendedPaginatedList。
public ExtendedPaginatedList getUserList(ExtendedPaginatedList extendedPaginatedList, User condition) {
StringBuilder sb = new StringBuilder();
sb.append(" select count(user.id) from ").append(User.class.getName()).append(" user ").append(" where 1=1 ");
if (null != condition && StringUtils.isNoneBlank(condition.getEmail())) {
sb.append(" and user.email like :email ");
}
if (null != condition && StringUtils.isNoneBlank(condition.getUsername())) {
sb.append(" and user.username = :username ");
}
Query query = getReadSession().createQuery(sb.toString());
if (null != condition && StringUtils.isNoneBlank(condition.getEmail())) {
query.setString("email", new StringBuilder("%").append(condition.getEmail()).append("%").toString());
}
if (null != condition && StringUtils.isNoneBlank(condition.getUsername())) {
query.setString("email", new StringBuilder("%").append(condition.getUsername()).append("%").toString());
}
try {
Number cnt = (Number) query.uniqueResult();
extendedPaginatedList.setFullListSize(cnt.intValue());
} catch (Exception e) {
extendedPaginatedList.setFullListSize(0);
return extendedPaginatedList;
}
sb = new StringBuilder();
sb.append(" from ").append(User.class.getName()).append(" user ").append(" where 1=1 ");
if (null != condition && StringUtils.isNoneBlank(condition.getEmail())) {
sb.append(" and user.email like :email ");
}
if (null != condition && StringUtils.isNoneBlank(condition.getUsername())) {
sb.append(" and user.username = :username ");
}
if (StringUtils.isNotBlank(extendedPaginatedList.getSortCriterion())) {
if (SortOrderEnum.ASCENDING.equals(extendedPaginatedList.getSortDirection())) {
sb.append(" order by ").append(extendedPaginatedList.getSortCriterion()).append(" asc ");
} else if (SortOrderEnum.DESCENDING.equals(extendedPaginatedList.getSortDirection())) {
sb.append(" order by ").append(extendedPaginatedList.getSortCriterion()).append(" desc ");
}
}
query = getReadSession().createQuery(sb.toString());
if (null != condition && StringUtils.isNoneBlank(condition.getEmail())) {
query.setString("email", new StringBuilder("%").append(condition.getEmail()).append("%").toString());
}
if (null != condition && StringUtils.isNoneBlank(condition.getUsername())) {
query.setString("email", new StringBuilder("%").append(condition.getUsername()).append("%").toString());
}
query.setFirstResult(extendedPaginatedList.getFirstRecordIndex());
query.setMaxResults(extendedPaginatedList.getObjectsPerPage());
extendedPaginatedList.setList(query.list());
return extendedPaginatedList;
}
6.寫完UserDaoHibernate.java後,將UserDao.java、UserManager.java、UserManagerImpl.java都加入此method。
a.UserDao.java
public ExtendedPaginatedList getUserList(ExtendedPaginatedList extendedPaginatedList, User condition) ;
b.UserManager.java
public ExtendedPaginatedList getUserList(ExtendedPaginatedList extendedPaginatedList, User condition) ;
c.UserManagerImpl.java
public ExtendedPaginatedList getUserList(ExtendedPaginatedList extendedPaginatedList, User condition) {
return userDao.getUserList(extendedPaginatedList, condition);
}
7.在UserAction.java中呼叫;修改UserAction.java中的list method,讓它呼叫我們剛剛加的method。
a. 首先需要增加ExtendedPaginatedList的Field。
private ExtendedPaginatedList userList;
public ExtendedPaginatedList getUserList() {
return userList;
}
public void setUserList(ExtendedPaginatedList userList) {
this.userList = userList;
}
b.修改list method如下:
public String list() {
userList = getPaginatedList();
userList = userManager.getUserList(userList, null);
return SUCCESS;
}
8.修改顯示的頁面參數。
顯示頁的JSP是webapp/WEB-INF/pages/admin/userList.jsp,開啟這個檔案後,修改如下:
原本的程式:
修改的程式:
到此為止,我們全部改完了,所以我們來看執行的結果:(我們將每頁的筆數改為2了)
程式中斷點中:
可以看到實際上被撈出來的只有二筆,而全部資料共有三筆。