一、在UserDAO接口中定义两个方法:
public interface UserDAO {
public List findByPage(final int page, final int pageSize);
int findTotalPage(int pageSize);
}
再实现接口:
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
@Override
public List findByPage(final int page, final int pageSize) {
List users = null;
final String hql = "from User";
users = this.getHibernateTemplate().executeFind(new HibernateCallback(){
@Override
public Object doInHibernate(org.hibernate.Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
query.setFirstResult((page - 1) * pageSize);
query.setMaxResults(pageSize);
return query.list();
}
});
return users;
}
@Override
public int findTotalPage(int pageSize) {
String hql = "select count(id) from User";
List list = this.getHibernateTemplate().find(hql);
int totalNum = Integer.parseInt(list.get(0).toString());
if(totalNum % pageSize == 0){
return totalNum / pageSize;
}else{
return totalNum / pageSize + 1;
}
}
}
二、在action层中添加代码:
public class UserListAction {
//传入
private int page = 3;//首先显示的页数
setter和getter方法
......
private int pageSize = 4;//每页的记录数
setter和getter方法
......
//传出:当前页显示的内容,总的页数
private List<User> users = null;
setter和getter方法
......
private int totalPage;
setter和getter方法
......
//属性注入
private UserDAO userList;
setter方法
......
public String execute(){
//具有分页功能的查询
users = userList.findByPage(page, pageSize);
totalPage = userList.findTotalPage(pageSize);
System.out.println("总共有 "+totalPage+" 页");
return "success";
}
}
三、在struts.xml文件中的配置
<struts>
<package name="com" extends="struts-default">
<action name="show">
<result>show.jsp</result>
</action>
<action name="list" class="com.action.UserListAction">
<result name="success">/WEB-INF/jsp/welcome.jsp</result>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</action>
</package>
</struts>
四、jsp页面的处理
<!-- 分页处理 -->
<div id="pages">
<s:if test="page > 1">
<a href="javascript:;"
οnclick="location.href='list.action?page=${page-1 }'">上一页</a>
</s:if>
<s:else>
<a href="javascript:;">上一页</a>
</s:else>
<s:iterator value="new int[totalPage]" status="i">
<s:if test="#i.count == page">
<a href="javascript:;" class="current_page"
οnclick="location.href='list.action?page=${i.count }'">${i.count}</a>
</s:if>
<s:else>
<a href="javascript:;"
οnclick="location.href='list.action?page=${i.count }'">${i.count}</a>
</s:else>
</s:iterator>
<s:if test="page < totalPage">
<a href="javascript:;"
οnclick="location.href='list.action?page=${page+1 }'">下一页</a>
</s:if>
<s:else>
<a href="javascript:;">下一页</a>
</s:else>
</div>