思路: 一般在list页面才要分页 1)所以加入一个参数来判断是否分页,如pageControll=true(当然可以不用,这步) 2)建一个转用的actionform(当然页可以是普通bean,我这里只是为了页面上少写scriplet) --网上找了个改造成自己想 要的 --PageController.java(见附) 3)在处理list的action代码里加入判断是否执行 PageController.java 里面的main()方法 如: pageControll = request.getParameter("pageControll"); //In case the parameter is null currentPage = (request.getParameter("currentPage") == null)?(new String("0")):request.getParameter("currentPage");
//change the String type to int cPage = Integer.parseInt( currentPage );
//first get the borad and then get it's boardItems boardItemsList = boardForm.getBoardItems(); //fen ye if( pageControll != null && pageControll.equals("true") ) { PageController pg = (new PageController()).main(boardItemsList,cPage); request.setAttribute("PageControllerForm",pg); }
在jsp页面上写: <bean:define id="offset" name="PageControllerForm" property="pageStartRow" type="Integer"/> <bean:define id="size" name="PageControllerForm" property="pageSize" type="Integer"/>
<bean:define id="previousPage" name="PageControllerForm" property="previousPage" type="Integer"/> <bean:define id="nextPage" name="PageControllerForm" property="nextPage" type="Integer"/> <bean:define id="totalPages" name="PageControllerForm" property="totalPages" type="Integer"/>
<% String url = "/do/BoardActions?method=listItems&pageControll=true¤tPage=";%> <logic:equal name="PageControllerForm" property="hasPrevious" value="true"> <html:link page="<%=url+1%>" paramId="id" paramName="BoardForm" paramProperty="id"> <bean:message key="common.fenye.first"/> </html:link> <html:link page="<%=url+previousPage%>" paramId="id" paramName="BoardForm" paramProperty="id"> <bean:message key="common.fenye.previous"/> </html:link> </logic:equal>
<logic:equal name="PageControllerForm" property="hasNext" value="true"> <html:link page="<%=url+nextPage%>" paramId="id" paramName="BoardForm" paramProperty="id"> <bean:message key="common.fenye.next"/> </html:link> <html:link page="<%=url+totalPages%>" paramId="id" paramName="BoardForm" paramProperty="id"> <bean:message key="common.fenye.last"/> </html:link> </logic:equal>
<logic:iterate id="boarditems" name="BoardItemsList" offset="<%=offset.toString()%>" length="<%=size.toString()%>">
附: package com.lpeng.base;
import java.util.List; import org.apache.struts.action.ActionForm;
public class PageController extends ActionForm {
int totalRowsAmount; //总行数 boolean rowsAmountSet; //是否设置过totalRowsAmount 1 int pageSize=10; //每页行数 int currentPage=1; //当前页码 int nextPage; int previousPage; int totalPages; //总页数 boolean hasNext; //是否有下一页 boolean hasPrevious; //是否有前一页 //String description; int pageStartRow; //开始行 int pageEndRow;
public PageController(int totalRows,int cPage){ setTotalRowsAmount(totalRows,cPage); } public PageController(){}
public int getTotalRowsAmount() { return totalRowsAmount; } public void setTotalRowsAmount(int i,int j) { if(!this.rowsAmountSet){ totalRowsAmount = i; totalPages=totalRowsAmount/pageSize+1; setCurrentPage((j == 0)?totalPages:j); this.rowsAmountSet=true; } } public boolean isRowsAmountSet() { return rowsAmountSet; } public void setRowsAmountSet(boolean b) { rowsAmountSet = b; }
public void setCurrentPage(int i) { currentPage = i; nextPage=currentPage+1; previousPage=currentPage-1; //计算当前页开始行和结束行 if(currentPage*pageSize<totalRowsAmount){ pageEndRow=currentPage*pageSize; pageStartRow=pageEndRow-pageSize; }else{//for the last page,这里我是为了默认的那页(最后一页)不足pagesize时也能显示pagesize这么多。。。。。。。 pageEndRow=totalRowsAmount; pageStartRow=pageEndRow-pageSize; } if (nextPage>totalPages){ hasNext=false; }else{ hasNext=true; } if(previousPage==0){ hasPrevious=false; }else{ hasPrevious=true; } }
public int getCurrentPage() { return currentPage; }
public boolean isHasNext() { return hasNext; } public void setHasNext(boolean b) { hasNext = b; }
public boolean isHasPrevious() { return hasPrevious; } public void setHasPrevious(boolean b) { hasPrevious = b; }
public int getNextPage() { return nextPage; } public void setNextPage(int i) { nextPage = i; }
public int getPageSize() { return pageSize; } public void setPageSize(int i) { pageSize = i; }
public int getPreviousPage() { return previousPage; } public void setPreviousPage(int i) { previousPage = i; }
public int getTotalPages() { return totalPages; } public void setTotalPages(int i) { totalPages = i; }
public int getPageEndRow() { return pageEndRow; } public void setPageEndRow( int pageEndRow ) { this.pageEndRow = pageEndRow; }
public int getPageStartRow() { return pageStartRow; } public void setPageStartRow( int pageStartRow) { this.pageStartRow = pageStartRow; } public PageController main(List list,int currentPage){ int rows = list.size(); PageController pc=new PageController(rows,currentPage); return pc; } } 
|