承接之前的文章

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了)

程式中斷點中:

可以看到實際上被撈出來的只有二筆,而全部資料共有三筆。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()