直接正题
一、INewsDao.java(DAO接口):
二、dao实现类,因为第13行中q.list().get(0)的返回值为long,所以转换一下。
三、INewsService.java业务接口,添加方法
四、业务实现类代码,注意修改参数
五、action代码:
以及上面两个的get()、set()方法。
这个6,是每页6个数据,可以通过页面动态传值。
六、页面代码
1、显示代码:
2、分页:
七、PageBean文件
OK,完工。
一、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
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 }
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 }
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;
private PageBean pageBean;
以及上面两个的get()、set()方法。
public String getPageList() {
this.pageBean = newsService.queryForPage(6, page);
return "newsList";
}
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 < 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 >
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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

OK,完工。