直接正題
一、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,完工。
此文部分內容來源網絡。如有侵犯您的版權問題,請來消息至電子郵件DyEngima&163.com(&換成@),經核實后會在文章內部標明來源。
轉載請注明來源http://www.aygfsteel.com/DyEnigma/簽名:有能力、有擔當、有情義的人才能稱之為男人,而不是由性別決定。