直接正题
一、INewsDao.java(DAO接口):
1
package
cn.dy.dao;
2
3
import
java.util.List;
4
import
cn.dy.bean.News;
5
6
public
interface
INewsDao {
7
8
//
其他代码省略
9

10
11
//
分页查询
12
public
List
<
News
>
queryForPage(String hql,
int
offset,
int
length);
13
14
//
总记录条数
15
public
int
getCount(String hql);
16
}
17
二、dao实现类,因为第13行中q.list().get(0)的返回值为long,所以转换一下。
1
@SuppressWarnings(
"
unchecked
"
)
2
@Override
3
public
List
<
News
>
queryForPage(String hql,
int
offset,
int
length) {
4
Query q
=
factory.getCurrentSession().createQuery(hql);
5
q.setFirstResult(offset);
6
q.setMaxResults(length);
7
return
q.list();
8
}
9
10
@Override
11
public
int
getCount(String hql) {
12
Query q
=
factory.getCurrentSession().createQuery(hql);
13
return
Integer.parseInt(q.list().get(
0
).toString());
14
}
三、INewsService.java业务接口,添加方法
public PageBean queryForPage(int pageSize, int currentPage);
四、业务实现类代码,注意修改参数
1
@Override
2
public
PageBean queryForPage(
int
pageSize,
int
page) {
3
String hql
=
"
select count(*) from News
"
;
4
int
count
=
newsDao.getCount(hql);
//
总记录数
5
int
totalPage
=
PageBean.countTotalPage(pageSize, count);
//
总页数
6
int
offset
=
PageBean.countOffset(pageSize, page);
//
当前页开始记录
7
int
length
=
pageSize;
//
每页记录数
8
int
currentPage
=
PageBean.countCurrentPage(page);
9
List
<
News
>
list
=
newsDao.queryForPage(
"
from News
"
, offset, length);
//
该分页的记录
10
//
把分页信息保存到Bean中
11
PageBean pageBean
=
new
PageBean();
12
pageBean.setPageSize(pageSize);
13
pageBean.setCurrentPage(currentPage);
14
pageBean.setAllRow(count);
15
pageBean.setTotalPage(totalPage);
16
pageBean.setList(list);
17
pageBean.init();
18
return
pageBean;
19
}
五、action代码:
private int page;
private PageBean pageBean;
以及上面两个的get()、set()方法。
public String getPageList() {
this.pageBean = newsService.queryForPage(6, page);
return "newsList";
}
这个6,是每页6个数据,可以通过页面动态传值。
六、页面代码
1、显示代码:
1
<
s:iterator
value
="pageBean.list"
>
2
<
tr
>
3
<
td
class
="tocenter"
>
4
<
s:property
value
="newsId"
/>
5
</
td
>
6
<
td
colspan
="5"
>
7
<
s:property
value
="newsContent"
/>
8
</
td
>
9
<
td
class
="tocenter"
>
10
<
s:property
value
="beginTime"
/>
11
</
td
>
12
</
tr
>
13
</
s:iterator
>
2、分页:
1
<
tr
>
2
<
td
width
="13%"
class
="tocenter"
>
3
共
4
<
s:property
value
="pageBean.totalPage"
/>
5
页
6
</
td
>
7
<
td
width
="17%"
class
="tocenter"
>
8
共
9
<
s:property
value
="pageBean.allRow"
/>
10
条记录
11
</
td
>
12
<
td
width
="15%"
class
="tocenter"
>
13
当前第
14
<
s:property
value
="pageBean.currentPage"
/>
15
页
16
</
td
>
17
<
td
colspan
="4"
width
="55%"
class
="tocenter"
>
18
<
s:if
test
="%{pageBean.currentPage == 1}"
>
第一页
上一页
</
s:if
>
19
<
s:else
>
20
<
a
href
="/DyEnigma/news/op_getPageList.do?page=1"
>
第一页
</
a
>
21
<
a
href
="/DyEnigma/news/op_getPageList.do?page=<s:property value="
%{pageBean.currentPage-1}"
/>
">上一页
</
a
>
22
</
s:else
>
23
<
s:if
test
="%{pageBean.currentPage != pageBean.totalPage}"
>
24
<
a
href
="/DyEnigma/news/op_getPageList.do?page=<s:property value="
%{pageBean.currentPage+1}"
/>
">下一页
</
a
>
25
<
a
href
="/DyEnigma/news/op_getPageList.do?page=<s:property value="
pageBean.totalPage"
/>
">最后一页
</
a
>
26
</
s:if
>
27
<
s:else
>
下一页
最后一页
</
s:else
>
28
</
td
>
29
</
tr
>
七、PageBean文件
1
package
cn.dy.own;
2

3
import
java.util.List;
4

5
@SuppressWarnings(
"
unchecked
"
)
6
public
class
PageBean
{
7
8
private List list;// 要返回的某一页的记录列表
9
10
private int allRow; // 总记录数
11
private int totalPage; // 总页数
12
private int currentPage; // 当前页
13
private int pageSize;// 每页记录数
14
15
@SuppressWarnings("unused")
16
private boolean isFirstPage; // 是否为第一页
17
@SuppressWarnings("unused")
18
private boolean isLastPage;// 是否为最后一页
19
@SuppressWarnings("unused")
20
private boolean hasPreviousPage; // 是否有前一页
21
@SuppressWarnings("unused")
22
private boolean hasNextPage;// 是否有下一页
23
24
public List getList() {
25
return list;
26
}
27
28
public void setList(List list) {
29
this.list = list;
30
}
31
32
public int getAllRow() {
33
return allRow;
34
}
35
36
public void setAllRow(int allRow) {
37
this.allRow = allRow;
38
}
39
40
public int getTotalPage() {
41
return totalPage;
42
}
43
44
public void setTotalPage(int totalPage) {
45
this.totalPage = totalPage;
46
}
47
48
public int getCurrentPage() {
49
return currentPage;
50
}
51
52
public void setCurrentPage(int currentPage) {
53
this.currentPage = currentPage;
54
}
55
56
public int getPageSize() {
57
return pageSize;
58
}
59
60
public void setPageSize(int pageSize) {
61
this.pageSize = pageSize;
62
}
63
64
/**
65
* 初始化分页信息
66
*/
67
public void init() {
68
this.isFirstPage = isFirstPage();
69
this.isLastPage = isLastPage();
70
this.hasPreviousPage = isHasPreviousPage();
71
this.hasNextPage = isHasNextPage();
72
}
73
74
/**
75
* 以下判断页的信息,只需getter方法(is方法)即可
76
*
77
* @return
78
*/
79
public boolean isFirstPage() {
80
return currentPage == 1; // 如是当前页是第1页
81
}
82
83
public boolean isLastPage() {
84
return currentPage == totalPage; // 如果当前页是最后一页
85
}
86
87
public boolean isHasPreviousPage() {
88
return currentPage != 1;// 只要当前页不是第1页
89
}
90
91
public boolean isHasNextPage() {
92
return currentPage != totalPage; // 只要当前页不是最后1页
93
}
94
95
/**
96
* 计算总页数,静态方法,供外部直接通过类名调用
97
*
98
* @param pageSize每页记录数
99
* @param allRow总记录数
100
* @return 总页数
101
*/
102
public static int countTotalPage(final int pageSize, final int allRow) {
103
int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1;
104
return totalPage;
105
}
106
107
/**
108
* 计算当前页开始记录
109
*
110
* @param pageSize每页记录数
111
* @param currentPage当前第几页
112
* @return 当前页开始记录号
113
*/
114
public static int countOffset(final int pageSize, final int currentPage) {
115
final int offset = pageSize * (currentPage - 1);
116
return offset;
117
}
118
119
/**
120
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
121
*
122
* @paramPage 传入的参数(可能为空,即0,则返回1)
123
* @return 当前页
124
*/
125
public static int countCurrentPage(int page) {
126
final int curPage = (page == 0 ? 1 : page);
127
return curPage;
128
}
129
}
OK,完工。
转载请注明来源 http://www.blogjava.net/DyEnigma/