- 论坛徽章:
- 0
|
上网查找了一些相关资料,Flex分页处理的例子比较多,但绝大多数都是一次查询,然后多次在结果集中取数据。这种做法在web程序中是不可取的。于是又查找了一些关于Ibatis分页的做法,尽管Ibatis本身就提供了一些便捷的方法,但网上的评价效果不佳。于是,这里采用了最典型的三层嵌套的方式,进行分页处理。
大概的思路是 Flex端向后台传递一个参数——当前页数currentPage,后台根据当前页数currentPage,总数据数和每页显示的数据数这三个参数,通过一个共通的Pagebean,算出每一次需要查询的开始记录数pageStartRow和结束记录数pageEndRow。然后将查询的结果集和pagebean一起返回到Flex端,结果集用来显示数据,而pagebean则对应Flex端的一个javabean(形式和后台的pagebean一样),用来空是分页控件的一些属性(如:是否显示下一页,前一页等等)。
具体代码如下:
1.Spring中与前台交互的代码:
public List getAllUserInfo(int currentPage)throws Exception{
try{
List rslt = new ArrayList();
PageBean pb = new PageBean();
pb=insertService.getTotalUserInfoCnt();
pb.page(Constants.PAGERECORDERS, currentPage, pb.gettotalRows());
rslt.add(pb);
List userInfo=new ArrayList();
userInfo=insertService.getAllUserInfo(pb);
rslt.add(userInfo);
return rslt;
}catch (Exception e){
log.info(e.toString());
throw e;
}
}
2.Ibatis 对应的xml代码
select id="getAllUserInfo" resultMap="userList" parameterClass="page">
![CDATA[
SELECT *
FROM (SELECT A.*,ROWNUM R
FROM (
SELECT RESUME_ID,
NAME,
TO_CHAR(BIRTHDAY,'YYYY/MM/DD') BIRTHDAY,
TO_CHAR(STARTDATE,'YYYY/MM/DD') STARTDATE
FROM BASIC_INFO
ORDER BY RESUME_ID
)A
WHERE ROWNUM=#pageEndRow#
) B
WHERE B.R>#pageStartRow#
]]>
/select>
3.实现翻页处理的关键
PageBean
package flex.samples.spring.bean;
public class PageBean {
/**
* 当面のページ。
*/
private int currentPage = 0;
/**
* 総括的なページ数。
*/
private int totalPages = 0;
/**
* 各ページの記録数。
*/
private int pageRecorders = 0;
/**
* 総括的な記録数。
*/
private int totalRows = 0;
/**
* 各ページの始まりの記録数。
*/
private int pageStartRow = 0;
/**
* 各ページの終わりの記録数。
*/
private int pageEndRow = 0;
/**
* 次のページの存在を判断する。
*/
private boolean hasNextPage = false;
/**
* 前のページの存在を判断する。
*/
private boolean hasPreviousPage = false;
/**
* 次のページ。
*/
private int nextPage = 0;
/**
* 前のページ。
*/
private int previousPage = 0;
public void setnextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getnextPage() {
return this.nextPage;
}
public void setpreviousPage(int previousPage) {
this.previousPage = previousPage;
}
public int getpreviousPage() {
return this.previousPage;
}
public int getcurrentPage() {
return this.currentPage;
}
public void setcurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getpageRecorders() {
return this.pageRecorders;
}
public void setpageRecorders(int pageRecorders) {
this.pageRecorders = pageRecorders;
}
public int getpageStartRow() {
return this.pageStartRow;
}
public void setpageStartRow(int pageStartRow) {
this.pageStartRow = pageStartRow;
}
public int getpageEndRow() {
return this.pageEndRow;
}
public void setpageEndRow(int pageEndRow) {
this.pageEndRow = pageEndRow;
}
public int gettotalPages() {
return this.totalPages;
}
public void settotalPages(int totalPages) {
this.totalPages = totalPages;
}
public int gettotalRows() {
return this.totalRows;
}
public void settotalRows(int totalRows){
this.totalRows=totalRows;
}
public boolean gethasNextPage() {
return this.hasNextPage;
}
public void sethasNextPage(boolean hasNextPage) {
this.hasNextPage = hasNextPage;
}
public boolean gethasPreviousPage() {
return this.hasPreviousPage;
}
public void sethasPreviousPage(boolean hasPreviousPage) {
this.hasPreviousPage = hasPreviousPage;
}
public void page(int pageRecorders, int currentPage, int totalRows) {
//次のページと前のページを計算する
this.nextPage = currentPage + 1;
//this.previousPage = currentPage - 1;
this.currentPage = currentPage;
//ページ数が整数である場合の処理
if ((totalRows % pageRecorders) == 0) {
//記録があ?場合の処理
if (totalRows != 0) {
this.totalPages = totalRows / pageRecorders;
} else {
//記録がない場合の処理
this.totalPages = 1;
}
} else {
//ページ数が整数でない場合の処理
this.totalPages = totalRows / pageRecorders + 1;
}
//当面のページ数がゼロである場合の処理
if (this.currentPage == 0) {
this.currentPage = currentPage;
}
//当面のページ数が設定する
if (this.currentPage > 1) {
this.currentPage = this.currentPage - 1;
if (this.currentPage * pageRecorders totalRows) {
this.currentPage = this.currentPage + 1;
}
}
//前のページの存在を判断する
if ((this.currentPage - 1) > 0) {
this.hasPreviousPage = true;
this.previousPage=this.currentPage - 1;
} else {
this.hasPreviousPage = false;
}
//次のページの存在を判断する
if (this.currentPage >= totalPages) {
this.hasNextPage = false;
} else {
this.hasNextPage = true;
}
//ジを判断する
if (this.currentPage * pageRecorders totalRows) {
//ジではない場合、ページの始まりの記録数と終数りの記録数を計算する
this.pageEndRow = currentPage * pageRecorders;
this.pageStartRow = pageEndRow - pageRecorders;
} else {
//ジの場合、終数りの記録数を計算する
this.pageEndRow = totalRows;
//記録がない時、ページの始まりの記録数を計算する
if (totalPages == 0) {
this.pageStartRow = 0;
} else {
//記録があ数時、ページの始まりの記録数を計算する
this.pageStartRow = pageRecorders * (totalPages - 1);
}
}
}
}
4.Felx端创建一个类似的pagebean
package puremvc.model.vo
{
[Bindable] [RemoteClass(alias="flex.samples.spring.bean.PageBean")]
public class Page
{
private var _currentPage:int = 0;
private var _totalPages:int = 0;
private var _pageRecorders:int = 0;
private var _totalRows:int = 0;
private var _pageStartRow:int = 0;
private var _pageEndRow:int = 0;
private var _hasNextPage:Boolean = false;
private var _hasPreviousPage:Boolean = false;
private var _nextPage:int = 0;
private var _previousPage:int = 0;
public function get currentPage(): int
{
return this._currentPage;
}
public function set currentPage(_currentPage:int): void
{
this._currentPage = _currentPage;
}
public function get totalPages(): int
{
return this._totalPages;
}
public function set totalPages(_totalPages:int): void
{
this._totalPages = _totalPages;
}
public function get pageRecorders(): int
{
return this._pageRecorders;
}
public function set pageRecorders(_pageRecorders:int): void
{
this._pageRecorders = _pageRecorders;
}
public function get totalRows(): int
{
return this._totalRows;
}
public function set totalRows(_totalRows:int): void
{
this._totalRows = _totalRows;
}
public function get pageStartRow(): int
{
return this._pageStartRow;
}
public function set pageStartRow(_pageStartRow:int): void
{
this._pageStartRow = _pageStartRow;
}
public function get pageEndRow(): int
{
return this._pageEndRow;
}
public function set pageEndRow(_pageEndRow:int): void
{
this._pageEndRow = _pageEndRow;
}
public function get hasNextPage(): Boolean
{
return this._hasNextPage;
}
public function set hasNextPage(_hasNextPage:Boolean): void
{
this._hasNextPage = _hasNextPage;
}
public function get hasPreviousPage(): Boolean
{
return this._hasPreviousPage;
}
public function set hasPreviousPage(_hasPreviousPage:Boolean): void
{
this._hasPreviousPage = _hasPreviousPage;
}
public function get nextPage(): int
{
return this._nextPage;
}
public function set nextPage(_nextPage:int): void
{
this._nextPage = _nextPage;
}
public function get previousPage(): int
{
return this._previousPage;
}
public function set previousPage(_previousPage:int): void
{
this._previousPage = _previousPage;
}
}
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72527/showart_1069611.html |
|