根据 YooJAG 生成的代码,默认为 displayTag 标签分页,现在,我们自己手动分页. 以"角色"列表分页为例.步骤如下:
第一步:修改ServiceBaseForm类,增加以下代码:
private int currentPage = 1; // 当前页
private int totalPages = 0; // 总页数
private int pageRecorders = DEFAULT_PAGE_LIST_SIZE;// 每页5条数据
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;// 上一页的页码
/**
* parse page number parameter
* @param totalRow
* @param currentPages
*/
public void parsePageIndex(int totalRow, int currentPages) {
//
if (0 >= totalRow) {
return;
}
this.totalRows = totalRow;
this.currentPage = currentPages;
hasPreviousPage = false;
if ((totalRows % pageRecorders) == 0) {
totalPages = totalRows / pageRecorders;
} else {
totalPages = (totalRows / pageRecorders) + 1;
}
if (0 < totalPages) {
if (1 == totalPages) // Only one page
{
hasPreviousPage = false;
hasNextPage = false;
pageStartRow = 0;
pageEndRow = totalRows;
} else if (currentPage == 1) // current page is the first page.
{
hasPreviousPage = false;
previousPage = 0;
hasNextPage = true;
nextPage = currentPage + 1;
pageStartRow = 0;
pageEndRow = pageRecorders;
} else if (currentPage == totalPages) // current page is the last
// page.
{
hasPreviousPage = true;
previousPage = currentPage - 1;
hasNextPage = false;
nextPage = currentPage;
pageStartRow = (currentPage - 1) * pageRecorders;
pageEndRow = totalRows;
} else {
hasPreviousPage = true;
previousPage = currentPage - 1 <= 0 ? 1 : currentPage - 1;
hasNextPage = true;
nextPage = currentPage + 1 >= totalPages ? totalPages
: currentPage + 1;
pageStartRow = (currentPage - 1) * pageRecorders;
pageEndRow = currentPage * pageRecorders;
}
}
else
{
//initial default value
currentPage = 1;
totalPages = 0;
pageRecorders = DEFAULT_PAGE_LIST_SIZE;
totalRows = 0;
pageStartRow = 0;
pageEndRow = 0;
hasNextPage = false;
hasPreviousPage = false;
nextPage = 0;
previousPage = 0;
}
}
注意: 要增加 get/set 方法, jsp 页面才可以调用,我们定义的分页属性.
第二步:修改 ServiceAction 类.
/**
* get current page number.
* @param request
* @param totalRows
* @return currentPages
*/
public int getCurrentPages(HttpServletRequest request, int totalRows)
{
int currentPages = getCurrentPageNo(request);
String pageNo = request.getParameter("pageNo");
if(null != pageNo || !"".equals(pageNo))
{
if("firstPage".equals(pageNo))
{
currentPages = 1;
}
else if("previousPage".equals(pageNo))
{
currentPages = currentPages -1 == 0 ? 1 : currentPages - 1;
}
else if("nextPage".equals(pageNo))
{
currentPages = currentPages + 1 == 0 ? 1 : currentPages + 1;
}
else if("lastPage".equals(pageNo))
{
currentPages = getTotalPages(totalRows);
}
}
return currentPages;
}
/**
* get current page number
* @param request
* @return currentPageNumber
*/
private int getCurrentPageNo(HttpServletRequest request)
{
int currentPageNumber = Integer.parseInt((null == request.getParameter("currentPage")) ?
"1" : request.getParameter("currentPage"));
return currentPageNumber;
}
/**
* total page number
* @param totalRows
* @return totalPages
*/
public int getTotalPages(int totalRows)
{
int totalPages;
if ((totalRows % ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE) == 0) {
totalPages = totalRows / ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE;
} else {
totalPages = (totalRows / ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE) + 1;
}
return totalPages;
}
/**
* get page start row number
* @param totalRows
* @param currentPage
* @return pageStartRow
*/
public int getPageStartRow(int totalRows,HttpServletRequest request) {
int pageStartRow = 0;
int currentPageNumber = getCurrentPages(request, totalRows);
int totalPages = getTotalPages(totalRows);
if (0 < totalPages) {
if (1 == totalPages) // Only one page
{
pageStartRow = 0;
}
else if (currentPageNumber == 1) // current page is the first page.
{
pageStartRow = 0;
} else if (currentPageNumber == totalPages) // current page is the last page.
{
pageStartRow = (currentPageNumber - 1) * ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE;
} else {
pageStartRow = (currentPageNumber - 1) * ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE;
}
}
return pageStartRow + 1;
}
/**
* get page end row number.
* @param totalRows
* @param currentPage
* @return pageEndRow
*/
public int getPageEndRow(int totalRows,HttpServletRequest request) {
int pageEndRow = 0;
int currentPageNumber = getCurrentPages(request, totalRows);
int totalPages = getTotalPages(totalRows);
if (0 < totalPages) {
if (1 == totalPages) // Only one page
{
pageEndRow = totalRows;
}
else if (currentPageNumber == 1) // current page is the first page.
{
pageEndRow = ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE;
} else if (currentPageNumber == totalPages) // current page is the last page.
{
pageEndRow = totalRows;
} else {
pageEndRow = currentPageNumber * ServiceBaseForm.DEFAULT_PAGE_LIST_SIZE;
}
}
return pageEndRow ;
}
第三步:修改 roles.jsp 页面.
<logic:greaterThan name='rolesSearchForm' property='totalPages' value="0"> <input type="hidden" name="pageNo" id="pageNo" value=""> <input type="hidden" name="currentPage" id="currentPage" value="<bean:write name="rolesSearchForm" property="currentPage"></bean:write>"> <logic:equal name="rolesSearchForm" property="hasPreviousPage" value="true"> <html:submit property="Search" styleClass="button" οnclick="javascript:document.all('pageNo').value = 'firstPage';"><< </html:submit> <html:submit property="Search" styleClass="button" οnclick="javascript:document.all('pageNo').value = 'previousPage';">< </html:submit> </logic:equal> <logic:equal name="rolesSearchForm" property="hasPreviousPage" value="false"> <html:submit property="Search" styleClass="button" disabled="true"><< </html:submit> <html:submit property="Search" styleClass="button" disabled="true">< </html:submit> </logic:equal> <bean:write name="rolesSearchForm" property="currentPage"></bean:write> Pages <logic:equal name="rolesSearchForm" property="hasNextPage" value="true"> <html:submit property="Search" styleClass="button" οnclick="javascript:document.all('pageNo').value = 'nextPage';">> </html:submit> <html:submit property="Search" styleClass="button" οnclick="javascript:document.all('pageNo').value = 'lastPage';"> >></html:submit> </logic:equal> <logic:equal name="rolesSearchForm" property="hasNextPage" value="false"> <html:submit property="Search" styleClass="button" disabled="true"> > </html:submit> <html:submit property="Search" styleClass="button" disabled="true"> >> </html:submit> </logic:equal> </logic:greaterThan>
第四步:修改 InitRolesSearchAction 类的 doPerform 方法实现.
int startIndex = getPageStartRow(totalRows, request);
int endIndex = getPageEndRow(totalRows, request);
rolesList = getAuthManagerDaoService().getRolesList(startIndex, endIndex);
totalRows = rolesList.size();
int pagesNumber = getCurrentPages(request, totalRows);
((RolesSearchForm) actionForm).parsePageIndex(totalRows, pagesNumber );