浏览 1558 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-06-19
1. 核心类:
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.nazca.consult.consultee.web.util.Pager;
import com.opensymphony.xwork2.ActionSupport;
/**
* 分页使用到的Action,如果其他有分页需要的action继承此Action即可使用分页功能
*
* @author XiaoQuan
*/
public class AbstractListActioin extends ActionSupport {
private static final long serialVersionUID = -4680224737445304053L;
private static Log log = LogFactory.getLog(AbstractListActioin.class);
public Pager makePager(String pageNumber, int total, int pageSize,
int ListStep) {
Pager pager = new Pager();
// 设置总数
pager.setTotal(total);
// 设置每页显示多少数据
pager.setPageSize(pageSize);
int pageNum = 1;
if (pageNumber != null) {
pageNum = Integer.parseInt(pageNumber);
}
// 设置当前页
pager.setCurrentPage(pageNum);
// 最多显示分页页数
pager.setListStep(ListStep);
// 求总页数,ceil(num)取整不小于num
pager.setPagesCount((int) Math.ceil((double) pager.getTotal()
/ pager.getPageSize()));
if (pager.getPagesCount() < pageNum) {
pager.setCurrentPage(pager.getPagesCount());// 如果分页变量大总页数,则将分页变量设计为总页数
}
if (pageNum < 1) {
pager.setCurrentPage(1);
}
// 从第几页开始显示分页信息
pager.setListBegin(pager.getCurrentPage() - (int) Math.ceil((double) pager.getListStep() / 2));
if (pager.getListBegin() < 1) {
pager.setListBegin(1);
}
// 分页信息显示到第几页
pager.setListEnd(pager.getCurrentPage() + pager.getListStep() / 2);
if (pager.getListEnd() > pager.getPagesCount()) {
pager.setListEnd(pager.getPagesCount());
}
List<String> list = new ArrayList<String>();
for (int i = pager.getListBegin(); i < pager.getListEnd(); i++) {
list.add(i + "");
}
pager.setPageList(list);
return pager;
}
}
Pager类:
import java.util.List;
/**
*
* @author XiaoQuan
*/
@SuppressWarnings("unchecked")
public class Pager {
private int beginPage;
private int endPage;
private int currentPage;
private int pageSize;
private int total;
private int listStep;
private int listBegin;
private int listEnd;
private int pagesCount;
private List pageList;
public int getBeginPage() {
return beginPage;
}
public void setBeginPage(int beginPage) {
this.beginPage = beginPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getListStep() {
return listStep;
}
public void setListStep(int listStep) {
this.listStep = listStep;
}
public int getListBegin() {
return listBegin;
}
public void setListBegin(int listBegin) {
this.listBegin = listBegin;
}
public int getListEnd() {
return listEnd;
}
public void setListEnd(int listEnd) {
this.listEnd = listEnd;
}
public int getPagesCount() {
return pagesCount;
}
public void setPagesCount(int pagesCount) {
this.pagesCount = pagesCount;
}
public List getPageList() {
return pageList;
}
public void setPageList(List pageList) {
this.pageList = pageList;
}
}
2. 需要使用分页的Action类继承该类
public class GetMyQListAction extends AbstractListActioin {
中间内容略....
//获得page对象,保存到session中
Pager pageP = makePager(getPage(), total,
Constants.MY_QUESTION_PAGE_N, Constants.LIST_STEP);
ctx.put("pager", pageP);
}
3.页面添加如下JSP内容即可
<div id="pageNavigator">
<span> <s:if test="#request.pager.currentPage > 1">
<s:url id="prePage" action="consult" includeParams="none">
<s:param name="pages" value="#request.pager.currentPage-1" />
</s:url>
<s:a href="#"
onclick="javascript:GetFavoriteQList(0,%{#request.pager.currentPage-1})">上一页</s:a>
</s:if> <s:else>
<span>上一页</span>
</s:else> </span>
<span> <s:iterator value="#request.pager.pageList" id="pageList"
status="pageNum">
<s:if test="#request.pager.currentPage == #pageList">
<b>[<s:property value="pageList" />]</b>
</s:if>
<s:else>
<s:a href="#"
onclick="javascript:GetFavoriteQList(0,%{pageList})">[<s:property
value="pageList" />]</s:a>
</s:else>
</s:iterator> </span>
<span> <s:if
test="#request.pager.currentPage != #request.pager.pagesCount">
<s:url id="nextPage" action="some" includeParams="none">
<s:param name="pages" value="#request.pager.currentPage+1" />
</s:url>
<s:a href="#"
onclick="javascript:GetFavoriteQList(0,%{#request.pager.currentPage+1})">下一页</s:a>
</s:if> <s:else>
<span>下一页</span>
</s:else> </span>
</div>
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-24
能不能详细点阿?兄弟。javascript在哪?数据怎么取
|
|
| 返回顶楼 | |
|
最后更新时间:2008-06-29
function GetList(q, p){
var url = null;
switch (q) {
case 1:
url = "A.action?page=" + p;
break;
default:
url = "B.action?page=" + p;
}
window.scrollTo(0, 0);
new Ajax.Request(url, {
method: 'post',
onSuccess: function(transport){
var favoriteQList = transport.responseText;
$("favoriteQ").innerHTML = favoriteQList;
},
onCreate: function(){
$("favoriteQ").innerHTML = $("loadingDiv").innerHTML;
},
onFailure: function(){
$('loadingText').innerHTML = "出错啦";
$("favoriteQ").innerHTML = $("loadingDiv").innerHTML;
}
});
}
q是列表的类型,p 是返回要获取的页数 |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-30
能不能提供demo的源代码呢?这样看着很累,自己想实验一下
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-01
直接打包上传下吧
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-04
private List pageList; --- 这个是虾米东东?
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-08
个人觉得这样在action里面分页不太好,毕竟,我们的查询,是多种多样的,大多时候,并不一个baseAction里面的makePager可以搞定的.同时,分页没有写成统一的标签,这样当你有大量分页存的时候,不容易统一控分页样式,就是手工拷贝代码,也容易出错,应该封装成一个完整的标签.
况且这样,似乎把DAO的功能,拿到action里面来做了,因为分页是DAO的事情,不是action的事情,而我们要做的,就是把分页的相关参数(startIndex,pageSize) 传给DAO,让DAO去决定如何分页,用多少数据,就取多少,也不是像楼主这样,全取出来,放到action里面去分页,这样就走回了displaytag以前走的路子. 放在DAO做的话,我们的makePager可能就会像:
public String makePager(){
String startIndex=this.getRequest().getParameter("startIndex");
String pageSize=this.getRequest().getParameter("pageSize");
List items= PageService.getPage(startIndex,pageSize);
}
几行代码,就可以解决分页问题,况且,以后要换DAO实现,也是一件很容易的事,上层根本感觉不到DAO的存在. 这一点在Faceye开源portal裡面,已經封裝的非常完善了.所有的數據查詢,在簡單的時候,只需要傳入一個參數就可以了,就可以给你返回一个完整的包装好的List,复杂的查询,可以任意去扩展. 具体 实现及代码可以参考 http://ecsun.javaeye.com |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-08
嗯 ,楼上的见解和我一样,我正在做这个标签,原则上 page类只是一个控制类,指示index和size,action里不宜放太多的业务逻辑啊
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-08
看看rubbin先生的,业务类写的很好了
|
|
| 返回顶楼 | |







![ecsun的博客: [海鹏Blog]--{FaceYe开源} 用户头像](http://www.javaeye.com/upload/logo/user/36668/bcfaff38-8200-4288-88e6-f588c3138e36.gif?1196653519)