当前第<font color="red">[$page.pageNum]</font>页
#if($page.pageNum > 1) ##显示上一页处理
#set($pageNum=$page.pageNum - 1) ##必须在这里先做减法运算后将值赋给变量,如果下面直接pageNum=$pageNum - 1输出的是$pageNum - 1 运算符两边空格勿忘!
<a title="上一页" href="systemDictionaryDetail!list.action?pageNum=$pageNum&parentId=$!parentId">[上一页]</a>
#end
#if($page.pageNum >= 4) ##第一页控制 1...3 4 5
<a href="systemDictionaryDetail!list.action?pageNum=1&parentId=$!parentId">1</a><span>...</span>
#end
#foreach($i in [$page.indexStart..$page.indexEnd]) ##这个类似于 <!-- <c:forEach var="pagenum" begin="${page.foreachbegin}" end="${page.foreachend}"> -->
#if($i == $page.pageNum)
<font color="red">$i</font>
#else
<a href="systemDictionaryDetail!list.action?pageNum=$i&parentId=$!parentId">$i</a>
#end
#end
#if($page.pageNum < $page.allPageNum - 2) ##最后一页的处理 17 18 19...20
<span>…</span><a href="systemDictionaryDetail!list.action?pageNum=$page.allPageNum&parentId=$!parentId" rel=start>$page.allPageNum</a>
#end
#if($page.pageNum != $page.allPageNum) ##显示下一页处理
#set($pageNum=$page.pageNum + 1)
<a title="上一页" href="systemDictionaryDetail!list.action?pageNum=$pageNum&parentId=$!parentId">[下一页]</a>
#end
总共$page.allPageNum页
<input id="pageCount" type="text" size="1" ><input type="button" onclick="doPage()" value="转到"/>
<script type="text/javascript">
function doPage(){
var obj = document.getElementById("pageCount");
var pagenum = obj.value;
var allpagesize = ${page.allPageNum};
if(!pagenum.match("\\d+")){
alert("请输入数字");
return;
}else if(pagenum<1){
pagenum = 1;
window.location.href="systemDictionaryDetail!list.action?pageNum=1&parentId=$!parentId";
}else if(pagenum > allpagesize ){
pagenum = allpagesize;
window.location.href="systemDictionaryDetail!list.action?pageNum=$page.allPageNum&parentId=$!parentId";
}else{
window.location.href="systemDictionaryDetail!list.action?parentId=$!parentId&pageNum="+pagenum;
}
}
</script>
PageUtil里的代码:
public class PageUtil {
private int allPageSize;// 数据库总条数(外部传入)
private int pageNum;// 当前第几页(外部传入)
private int pageShowSize = 5;// 每页多少条数据
private int allPageNum;// 一共多少页
private int selectStart;// 数据库的起始搜索位置
private int indexStart;// 前台页面的起始索引
private int indexEnd;// 前台页面的结束索引
private List pageInfo;// 从数据库查询出来的数据
public PageUtil(int allPageSize, int pageNum) {
this.allPageSize = allPageSize;
this.pageNum = pageNum;
System.out.println("总共多少条 "+this.allPageSize);
System.out.println("总共多少页 "+this.allPageNum);
if (allPageSize % pageShowSize == 0) {
this.allPageNum = this.allPageSize / this.pageShowSize;
} else {
this.allPageNum = this.allPageSize / this.pageShowSize + 1;
}
this.selectStart = (this.pageNum - 1) * this.pageShowSize;
if (this.allPageNum < 3) {
this.indexStart = 1;
this.indexEnd = this.allPageNum;
} else {
this.indexStart = this.pageNum - 2;// 前台页面的起始页是当前页数-2 要和前台的第一页控制一样第一页控制大于多少,这里就得减去多少
this.indexEnd = this.pageNum + 2;// 前台页面的结束页是当前页数+2
if (this.indexStart < 1) {
this.indexStart = 1;
this.indexEnd = 5;
} else if(this.indexEnd > this.allPageNum) {
this.indexStart = this.allPageNum - 5;
this.indexEnd = this.allPageNum;
}
}
}
public int getAllPageSize() {
return allPageSize;
}
public void setAllPageSize(int allPageSize) {
this.allPageSize = allPageSize;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public int getPageShowSize() {
return pageShowSize;
}
public void setPageShowSize(int pageShowSize) {
this.pageShowSize = pageShowSize;
}
public int getAllPageNum() {
return allPageNum;
}
public void setAllPageNum(int allPageNum) {
this.allPageNum = allPageNum;
}
public int getSelectStart() {
return selectStart;
}
public void setSelectStart(int selectStart) {
this.selectStart = selectStart;
}
public int getIndexStart() {
return indexStart;
}
public void setIndexStart(int indexStart) {
this.indexStart = indexStart;
}
public int getIndexEnd() {
return indexEnd;
}
public void setIndexEnd(int indexEnd) {
this.indexEnd = indexEnd;
}
public List getPageInfo() {
return pageInfo;
}
public void setPageInfo(List pageInfo) {
this.pageInfo = pageInfo;
}
}
BaseDaoImpl实现类定义的查询方法:
public List getByHQL(final String hql, final Object[] values, final Integer start, final Integer max) {
List list = (List)hibernateTemplate.execute(new HibernateCallback() { //查询
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createQuery(hql);
if(values != null && values.length > 0){
/*int n = 0;
for(Object value : values){
query.setParameter(n++, value);
}*/
for(int i = 0; i< values.length; i++){
query.setParameter(i, values[i]);
}
}
if(start != null && start >= 0){
query.setFirstResult(start);
}
if(max != null){
query.setMaxResults(max);
}
return query.list();
}
});
return list;
}
public int getCount(final String hql) {//查询总条数
Long count = (Long)hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(hql);
if(hql != null && !"".equals(hql)){
return query.list().get(0);
}else{
return null;
}
}
});
return count.intValue();
}
在BaseServiceImpl实现类中注入Dao后定义查询方法:
public PageUtil getPage(String pageNum) {
PageUtil page = null;
int allPageSize = genericDao.getCount("select count(*) from "+clz.getSimpleName()+" obj");
if(pageNum == null || "".equals(pageNum)){//表示第一次进入这个列表页面
page = new PageUtil(allPageSize,1);
}else{
page = new PageUtil(allPageSize, Integer.parseInt(pageNum));
}
String hql = "from "+clz.getSimpleName()+" obj";
page.setPageInfo(genericDao.getByHQL(hql, null, page.getSelectStart(),page.getPageShowSize()));
return page;
}
在Action中只需要调用page = xxxService.getPage(pageNum) 将pageNum从前台页面传入即可