关于此文
运用第一篇分页的例子,结果以失败告终。在网上又寻找了很多例子。大多是都是这一种。着手开发的项目采用spring MVC框架。符合需求。摘下来,试了一试。
网上的例子总是少一些东西。经过一番折腾。终于搞定了。下面分享出来,供参考。
分页基本逻辑思想懂了,重点是在于怎么实现。怎么实现更好。还需要进一步思考。
配置xml-pager.tld
分页控件-Pager
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/***
- 分页控件
- @author Anny
*/
public class Pager extends TagSupport {
private Integer curPage; //当前页码
private Integer totalPage; //总页数
private Integer pageSize = 10; //一页显示的记录数
private Integer totalCount = 0; //记录总数
private String formId; //请求的action name
private Integer lastIndex; //结束索引
public int doStartTag() throws JspException {
StringBuffer buffer=new StringBuffer();
JspWriter out = pageContext.getOut();
int pageNumber = 0;
if (totalPage % pageSize == 0) {
pageNumber = totalPage / pageSize;
} else {
pageNumber = (totalPage / pageSize) + 1;
}
if (curPage < 1) {
curPage = 1;
}
try {
if (pageNumber > 0) {
buffer.append("");//script-end
out.print(buffer.toString());
out.append("
out.print("
- ");//添加Bootstrap分页的样式pagination
- 首页 ");
- 上一页 ");
- " + i + " ");
- " + i + " ");
- 下一页 ");
- 尾页 ");
- 共" + totalPage + "页" + this.totalCount + "条 ");
int start = 1;
int end = totalPage;
for (int i = 4; i >= 1; i--) {
if ((curPage - i) >= 1) {
start = curPage - i;
break;
}
}
for (int i = 4; i >= 1; i--) {
if ((curPage + i) <= totalPage) {
end = curPage + i;
break;
}
}
// 如果小于9则右侧补齐
if (end - start + 1 <= 9) {
Integer padLen = 9 - (end - start + 1);
for (int i = padLen; i >= 1; i--) {
if ((end + i) <= totalPage) {
end = end + i;
break;
}
}
}
// 如果还小于9左侧补齐
if (end - start + 1 <= 9) {
Integer padLen = 9 - (end - start + 1);
for (int i = padLen; i >= 1; i--) {
if ((start - i) >= 1) {
start = start - i;
break;
}
}
}
if (curPage > 1) {
if (start > 1) {
out.print("
}
out.print("
}
for (int i = start; i <= end; i++) {
if (i == curPage) {
out.print("
} else {
out.print("
}
}
if (curPage < totalPage) {
out.print("
if (end < totalPage) {
out.print("
}
}
out.print("
out.print("
out.print("
}
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
/**
- 算开始索引
- @param pageNum -
- @param pageSize
- @return
/
public static Integer getStartIndex(Integer pageNum,Integer pageSize) {
Integer res = 0;
if (pageNum > 0) {
res = (pageNum - 1) pageSize;
}
return res;
}
/**
- 算结束索引 -- 方法暂时未用
- @param pageSize
- @param totalCount
- @param totalPage
- @param pageNum
- @return
/
public static Integer getLastIndex(Integer pageSize,Integer totalCount,Integer totalPage,Integer pageNum){
//计算结束时候的索引
Integer lastIndex =0;
if( totalCount < pageSize){
lastIndex = totalCount;
}else if((totalCount % pageSize == 0) || (totalCount % pageSize != 0 && pageNum < totalPage)){
lastIndex = pageNum pageSize;
}else if(totalCount % pageSize != 0 && pageNum == totalPage){//最后一页
lastIndex = totalCount ;
}
return lastIndex;
}
public Integer getLastIndex() {
return lastIndex;
}
public void setLastIndex(Integer lastIndex) {
this.lastIndex = lastIndex;
}
public void setCurPage(Integer curPage) {
this.curPage = curPage;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public void setFormId(String formId) {
this.formId = formId;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
}
分页action集成类-BaseController
<div class="jb51code">
<pre class="brush:java;">
package getui.controller;
import getui.util.Pager;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.ui.Model;
/**
//初始化分页相关信息
protected void initPage(Map<String,Object> map,Integer pageNum,Integer pageSize,Integer totalCount){
if(null==pageSize || pageSize.equals("")){
pageSize = 10; //每页显示条数
}
// if(pageSize>50){
// pageSize = 50;
// }
Integer totalPage = (totalCount+pageSize-1)/pageSize;
if(null==pageNum){
pageNum = 1;
}else if(pageNum>totalPage){
pageNum = totalPage;
}
map.put("startIndex",Pager.getStartIndex(pageNum,pageSize));
map.put("pageNum",pageNum);
map.put("totalPage",totalPage);
map.put("pageSize",pageSize);
map.put("totalCount",totalCount);
map.put("lastIndex",Pager.getLastIndex(pageSize,totalCount,totalPage,pageNum));
}
//将相关数据放入model
protected void initResult(Model model,List<Map<String,Object>> list,Map<String,Object> map){
model.addAttribute("list",list);
Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry m = (Map.Entry)it.next();
model.addAttribute(m.getKey().toString(),m.getValue());
}
}
}