atruts2分页

来源:互联网 发布:大圣归来豆瓣知乎 编辑:程序博客网 时间:2024/06/01 08:27

您还未登录 ! 我的应用 登录 注册 .
.论坛首页 → Java编程和Java企业应用版 → Struts → 也显示一下我的Struts2分页.全部 Hibernate Spring Struts iBATIS 企业应用 设计模式 DAO 领域模型 OO Tomcat SOA JBoss Swing Java综合  myApps快速开发平台,配置即开发、所见即所得,节约85%工作量 ? 上一页 1 2 3 4 下一页 ?浏览 4512 次主题:也显示一下我的Struts2分页精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
zhangjunji111
等级:

文章: 29
积分: 130
来自: 北京

    发表时间:2010-01-28   < > 猎头职位: 上海: 30万起年薪诚聘平台高级架构师 相关文章:  
■Struts2自定义分页标签,基于tangshuo的源码上改进的
■自己写的一个分页标签
■看到很多人都发布了hibernate dao 我都看了下 也写了一份 很多人都提了建议,将查询抽取出来这个建议不错,我这个就是吸取了大家的建议,还加了分页标签。

推荐圈子: GT-Grid
更多相关推荐   最近看见网上有不少基于Struts2+spring分页的东西,自己感觉都不是很适合,许多都只是对一个列表进行了分页,而没有考虑到查询条件等。个人认为,分页就是从前台把查询条件输入进去然后返回查询结果列表。这个问题的难点就是查询条件的传递,因为第一次查询时候需要输入查询条件,而以后点下一页时候,就不需要再次输入查询条件了。所以,第一次查询时候,需要把查询条件保存到某个地方,再次查询时候,把条件取出来,同时,这些要做的通用,等有许多查询页面时候,能最大限度的重用代码,好了,废话少说,下面展示我的分页代码

首先写一个Pages类,用来保存分页的一些信息,包括当前页码、记录总数、总页数、每页显示的记录数、查询条件等。代码如下:

Java代码
1.public class Pages {  
2.    private int pageNo = 1; // 当前页码  
3. 
4.    private int totalNum = -1;// 记录总数  
5. 
6.    private int totalPage = -1; // 总页数  
7. 
8.    int perPageNum = 10; // 每页显示记录数  
9. 
10.    private String queryParames;// 查询条件  
11. 
12.    public String getQueryParames() {  
13.        return queryParames;  
14.    }  
15. 
16.    public void setQueryParames(String queryParames) {  
17.        this.queryParames = queryParames;  
18.    }  
19. 
20.    public Pages() {  
21.    }  
22. 
23.    public Pages(int pageNo, int totalNum, int perPageNum) {  
24.        this.pageNo = pageNo;  
25.        this.totalNum = totalNum;  
26.        this.perPageNum = perPageNum;  
27.        this.executeCount();  
28.    }  
29. 
30.    public void executeCount() {  
31.        this.totalPage = (int) Math.ceil((this.totalNum + this.perPageNum - 1)  
32.                / this.perPageNum);  
33.        if (this.totalPage <= 0) {  
34.            this.totalPage = 1;  
35.        }  
36.        int intPage = this.pageNo;  
37.        if (intPage > this.totalPage) {  
38.            this.pageNo = this.totalPage;  
39.        } else {  
40.            this.pageNo = intPage;  
41.        }  
42.    }  
43. 
44.    public int getPageNo() {  
45.        return pageNo;  
46.    }  
47. 
48.    public void setPageNo(int pageNo) {  
49.        this.pageNo = pageNo;  
50.    }  
51. 
52.    public int getPerPageNum() {  
53.        return perPageNum;  
54.    }  
55. 
56.    public void setPerPageNum(int perPageNum) {  
57.        this.perPageNum = perPageNum;  
58.    }  
59. 
60.    public int getTotalNum() {  
61.        return totalNum;  
62.    }  
63. 
64.    public void setTotalNum(int totalNum) {  
65.        this.totalNum = totalNum;  
66.    }  
67. 
68.    public int getTotalPage() {  
69.        return totalPage;  
70.    }  
71. 
72.    public void setTotalPage(int totalPage) {  
73.        this.totalPage = totalPage;  
74.    }  
75. 
76.    public Map transQueryCondition() {  
77.        Map<String, String> map = new HashMap<String, String>();  
78.        if (StringUtils.isNull(queryParames)) {  
79.            return map;  
80.        }  
81.        String[] condtions = queryParames.split(";");  
82.        for (int i = 0; i < condtions.length; i++) {  
83.            if (StringUtils.isNull(condtions[i])) {  
84.                continue;  
85.            }  
86.            map.put(condtions[i].split(",")[0], condtions[i].split(",")[1]);  
87.        }  
88.        return map;  
89.    } 
public class Pages {
 private int pageNo = 1; // 当前页码

 private int totalNum = -1;// 记录总数

 private int totalPage = -1; // 总页数

 int perPageNum = 10; // 每页显示记录数

 private String queryParames;// 查询条件

 public String getQueryParames() {
  return queryParames;
 }

 public void setQueryParames(String queryParames) {
  this.queryParames = queryParames;
 }

 public Pages() {
 }

 public Pages(int pageNo, int totalNum, int perPageNum) {
  this.pageNo = pageNo;
  this.totalNum = totalNum;
  this.perPageNum = perPageNum;
  this.executeCount();
 }

 public void executeCount() {
  this.totalPage = (int) Math.ceil((this.totalNum + this.perPageNum - 1)
    / this.perPageNum);
  if (this.totalPage <= 0) {
   this.totalPage = 1;
  }
  int intPage = this.pageNo;
  if (intPage > this.totalPage) {
   this.pageNo = this.totalPage;
  } else {
   this.pageNo = intPage;
  }
 }

 public int getPageNo() {
  return pageNo;
 }

 public void setPageNo(int pageNo) {
  this.pageNo = pageNo;
 }

 public int getPerPageNum() {
  return perPageNum;
 }

 public void setPerPageNum(int perPageNum) {
  this.perPageNum = perPageNum;
 }

 public int getTotalNum() {
  return totalNum;
 }

 public void setTotalNum(int totalNum) {
  this.totalNum = totalNum;
 }

 public int getTotalPage() {
  return totalPage;
 }

 public void setTotalPage(int totalPage) {
  this.totalPage = totalPage;
 }

 public Map transQueryCondition() {
  Map<String, String> map = new HashMap<String, String>();
  if (StringUtils.isNull(queryParames)) {
   return map;
  }
  String[] condtions = queryParames.split(";");
  for (int i = 0; i < condtions.length; i++) {
   if (StringUtils.isNull(condtions[i])) {
    continue;
   }
   map.put(condtions[i].split(",")[0], condtions[i].split(",")[1]);
  }
  return map;
 } 下面写一个通用的Action类,用来初始化查询参数:

Java代码
1.public abstract class ListAction extends ActionSupport {  
2.    protected static final String LIST = "list";  
3. 
4.    Logger logger = Logger.getLogger(ListAction.class);  
5. 
6.    /* 
7.     * 当前页 
8.     */ 
9.    private int pageNo = 1;  
10. 
11.    /* 
12.     * 总页数 
13.     */ 
14.    private int totalPage = -1;  
15. 
16.    /* 
17.     * 总记录数 
18.     */ 
19.    private int totalNum = -1;  
20. 
21.    /* 
22.     * 查询参数 
23.     */ 
24.    private String queryParames;  
25. 
26.    private PageList pageList;  
27. 
28.    public final String execute() {  
29.        initQuerycondition();  
30.        Pages pages = new Pages();  
31.        pages.setPageNo(this.getPageNo());  
32.        pages.setPerPageNum(10);  
33.        pages.setTotalNum(totalNum);  
34.        pages.executeCount();  
35.        this.setTotalPage(pages.getTotalPage());  
36.        pages.setQueryParames(queryParames);  
37.        queryPageList(pages);  
38.        this.setTotalPage(pages.getTotalPage());  
39.        this.setTotalNum(pages.getTotalNum());  
40.        return LIST;  
41.    }  
42. 
43.    /** 
44.     * 实现每个查询结果列表,依据查询结果的不同而不同 
45.     * @param pages 
46.     */ 
47.    protected abstract void queryPageList(Pages pages);  
48. 
49.    /** 
50.     * 初始化查询参数的配置 
51.     */ 
52.    protected void initQuerycondition() {  
53.        /* 
54.         *如果不是第一次查询,直接返回,否则设置查询参数,拼装成 queryParames 
55.         */ 
56.        if (totalNum >= 0) {  
57.            return;  
58.        }  
59.        Map map = ActionContext.getContext().getParameters();  
60.        Iterator iter = map.keySet().iterator();  
61.        StringBuffer query = new StringBuffer();  
62.        while (iter.hasNext()) {  
63.            String key = (String) iter.next();  
64.            Object keyValue = ((Object[]) map.get(key))[0];  
65.            String value = "";  
66.            if (!StringUtils.isObjNull(keyValue)) {  
67.                query.append(";").append(key);  
68.                if (keyValue instanceof Date) {  
69.                    value = DateUtils.trunsDateToString((Date) keyValue);  
70.                } else {  
71.                    value = String.valueOf(keyValue);  
72.                }  
73.                query.append(",").append(value);  
74.            }  
75.        }  
76.        this.setQueryParames(query.toString());  
77.    }  
78. 
79.//get.....set...方法    
80.} 
public abstract class ListAction extends ActionSupport {
 protected static final String LIST = "list";

 Logger logger = Logger.getLogger(ListAction.class);

 /*
  * 当前页
  */
 private int pageNo = 1;

 /*
  * 总页数
  */
 private int totalPage = -1;

 /*
  * 总记录数
  */
 private int totalNum = -1;

 /*
  * 查询参数
  */
 private String queryParames;

 private PageList pageList;

 public final String execute() {
  initQuerycondition();
  Pages pages = new Pages();
  pages.setPageNo(this.getPageNo());
  pages.setPerPageNum(10);
  pages.setTotalNum(totalNum);
  pages.executeCount();
  this.setTotalPage(pages.getTotalPage());
  pages.setQueryParames(queryParames);
  queryPageList(pages);
  this.setTotalPage(pages.getTotalPage());
  this.setTotalNum(pages.getTotalNum());
  return LIST;
 }

 /**
  * 实现每个查询结果列表,依据查询结果的不同而不同
  * @param pages
  */
 protected abstract void queryPageList(Pages pages);

 /**
  * 初始化查询参数的配置
  */
 protected void initQuerycondition() {
  /*
   *如果不是第一次查询,直接返回,否则设置查询参数,拼装成 queryParames
   */
  if (totalNum >= 0) {
   return;
  }
  Map map = ActionContext.getContext().getParameters();
  Iterator iter = map.keySet().iterator();
  StringBuffer query = new StringBuffer();
  while (iter.hasNext()) {
   String key = (String) iter.next();
   Object keyValue = ((Object[]) map.get(key))[0];
   String value = "";
   if (!StringUtils.isObjNull(keyValue)) {
    query.append(";").append(key);
    if (keyValue instanceof Date) {
     value = DateUtils.trunsDateToString((Date) keyValue);
    } else {
     value = String.valueOf(keyValue);
    }
    query.append(",").append(value);
   }
  }
  this.setQueryParames(query.toString());
 }

//get.....set...方法 
}再写一个Page类,继承Component,用来获取ValueStack中的参数值。

Java代码
1.public class Page extends Component {  
2.    private static final Log logger = LogFactory.getLog(Page.class);  
3.    public Page(ValueStack stack) {  
4.        super(stack);  
5.    }  
6. 
7.    private String pageNo; // 当前页码  
8. 
9.    private String totalPage; // 总页数  
10. 
11.    private String totalNum; // 总记录数  
12. 
13.    private String styleClass; // 分页的样式  
14. 
15.    private String theme; // 分页的主题  
16. 
17.    private String url; // action的路径  
18. 
19.    private String urlType; // 路径的类型,主要用于URL重写的扩展  
20. 
21.    private String queryParames;  
22. 
23.    public String getQueryParames() {  
24.        return queryParames;  
25.    }  
26. 
27.    public void setQueryParames(String queryParames) {  
28.        this.queryParames = queryParames;  
29.    }  
30. 
31.    public boolean start(Writer writer) {  
32.        boolean result = super.start(writer);  
33.          
34.        Object obj = this.getStack().findValue(pageNo);  
35. 
36.        pageNo = String.valueOf((Integer) obj);  
37. 
38.        obj = this.getStack().findValue(totalPage);  
39. 
40.        totalPage = String.valueOf((Integer) obj);  
41. 
42.        obj = this.getStack().findValue(totalNum);  
43.        totalNum = String.valueOf((Integer) obj);  
44. 
45.        StringBuilder str = new StringBuilder();  
46. 
47.        Map cont = this.getStack().getContext();  
48. 
49.        StrutsRequestWrapper req = (StrutsRequestWrapper) cont  
50.                .get(StrutsStatics.HTTP_REQUEST);  
51. 
52.        if (url == null || "".equals(url)) {  
53. 
54.            url = (String) req  
55.                    .getAttribute("javax.servlet.forward.request_uri");  
56. 
57.        }  
58.        String pageStr = "?totalNum=" + totalNum + "&pageNo=";  
59. 
60.        if ("dir".equals(urlType)) {  
61.            pageStr = "";  
62. 
63.            if ("1".equals(pageNo)) {// 第一页时  
64. 
65.                if (url.lastIndexOf("/") != url.length() - 1) {  
66. 
67.                    if (url.lastIndexOf("1") == url.length() - 1) {// 如果有页码1,则去掉1  
68. 
69.                        url = url.substring(0, url.length() - 1);  
70. 
71.                    } else if (url.lastIndexOf("/") != url.length() - 1) {// 如果没有页码1,并且最后不是'/'时,加上'/'  
72. 
73.                        url = url + "/";  
74. 
75.                    }  
76. 
77.                }  
78. 
79.            } else {  
80. 
81.                url = url.substring(0, url.lastIndexOf("/") + 1);  
82. 
83.            }  
84. 
85.        }  
86. 
87.          
88.        // 下面这段处理主要是用来处理动态查询的参数,并拼接成url  
89.        StringBuffer perUrl = new StringBuffer("");  
90.        obj = this.getStack().findValue(queryParames);  
91.        if (!StringUtils.isObjNull(obj)) {  
92.            perUrl.append("&").append("queryParames").append("=").append(  
93.                    StringUtils.decode((String) obj));  
94.        }  
95.          
96.        //当前页  
97.        Integer cpageInt = Integer.valueOf(pageNo);  
98.        str.append("<span> ");  
99.        // 文本样式  
100.        if (theme == null || "text".equals(theme)) {  
101.            // 当前页与总页数相等  
102.            if (pageNo.equals(totalPage)) {  
103.                // 如果total = 1,则无需分页,显示“[第1页] [共1页]”  
104.                if ("1".equals(totalPage)) {  
105.                    str.append("[第 " + pageNo + " 页]");  
106. 
107.                    str.append(" [共 " + totalPage + " 页]");  
108. 
109.                } else {  
110. 
111.                    // 到达最后一页,显示“[首页] [上一页] [末页]”  
112.                    str.append("<a href='" + url + pageStr + "1" + perUrl  
113.                            + "'>[首  页]</a> ");  
114. 
115.                    str.append("<a href='" + url + pageStr + (cpageInt - 1)  
116.                            + perUrl + "'>[上一页]</a>");  
117. 
118.                    str.append("[下一页]");  
119. 
120.                    str.append(" <a href='" + url + pageStr + totalPage  
121.                            + perUrl + "'>[末  页]</a> ");  
122. 
123.                }  
124. 
125.            } else {  
126. 
127.                // 当前页与总页数不相同  
128.                if ("1".equals(pageNo)) {  
129. 
130.                    // 第一页,显示“[首 页] [下一页] [末页]”  
131. 
132.                    str.append("<a href='" + url + pageStr + "1" + perUrl  
133.                            + "'>[首  页]</a>");  
134.                    str.append("[上一页]");  
135.                    str.append("<a href='" + url + pageStr + (cpageInt + 1)  
136.                            + perUrl + "'>[下一页]</a>");  
137.                    str.append("<a href='" + url + pageStr + totalPage + perUrl  
138.                            + "'>[末  页]</a>");  
139. 
140.                } else {  
141. 
142.                    // 不是第一页,显示“[首页] [上一页] [下一页] [末页]”  
143. 
144.                    str.append("<a href='" + url + pageStr + "1" + perUrl  
145.                            + "'>[首  页]</a>");  
146. 
147.                    str.append("<a href='" + url + pageStr + (cpageInt - 1)  
148.                            + perUrl + "'>[上一页]</a>");  
149. 
150.                    str.append("<a href='" + url + pageStr + (cpageInt + 1)  
151.                            + perUrl + "'>[下一页]</a>");  
152. 
153.                    str.append("<a href='" + url + pageStr + totalPage + perUrl  
154.                            + "'>[末  页]</a>");  
155. 
156.                }  
157. 
158.            }  
159. 
160.        } else if ("number".equals(theme)) { // 数字样式 [1 2 3 4 5 6 7 8 9 10 >                                         // >>]  
161.            Integer totalInt = Integer.valueOf(totalPage);  
162.            // 如果只有一页,则无需分页  
163.            str.append("[ ");  
164.            if (totalInt == 1) {  
165.                str.append("<strong>1</strong> ");  
166.            } else {  
167.                //当前页  
168.                if (cpageInt > 1) {  
169.                    // 当前不是第一组,要显示“<< <”  
170.                    // <<:返回前一组第一页  
171.                    // <:返回前一页  
172.                    str.append("<a href='" + url + pageStr + "1" + perUrl  
173.                            + "'> << </a> ");  
174.                    str.append("<a href='" + url + pageStr + (cpageInt - 1)  
175.                            + perUrl);  
176.                    str.append("'><</a> ");  
177.                } else {  
178.                    str.append("<< < ");  
179.                }  
180.                int v = (cpageInt - 4) > 0 ? (cpageInt - 4) : 1;  
181.                int v1 = (cpageInt + 4) < totalInt ? (cpageInt + 4) : totalInt;  
182.                if (v1 == totalInt) {  
183.                    v = totalInt - 10;  
184.                    v = (v <= 0 ? 1 : v); // 如果为负数,则修改为1  
185. 
186.                } else if (v == 1 && v1 < totalInt) {  
187.                    v1 = totalInt > 10 ? 10 : totalInt;  
188.                }  
189.                // 10个为一组显示  
190.                for (int i = v; i <= v1; i++) {  
191.                    if (cpageInt == i) { // 当前页要加粗显示  
192.                        str.append("<strong>" + i + "</strong> ");  
193.                    } else {  
194.                        str.append("<a href='" + url + pageStr + i + perUrl  
195.                                + "'>" + i + "</a> ");  
196.                    }  
197.                }  
198.                // 如果多于1组并且不是最后一组,显示“> >>”  
199. 
200.                if (cpageInt < totalInt) {  
201. 
202.                    // >>:返回下一组最后一页  
203. 
204.                    // >:返回下一页  
205. 
206.                    str.append("<a href='" + url + pageStr + (cpageInt + 1)  
207.                            + perUrl);  
208. 
209.                    str.append("'>></a> ");  
210. 
211.                    str.append("<a href='" + url + pageStr + totalInt + perUrl);  
212. 
213.                    str.append("'> >> </a> ");  
214. 
215.                } else {  
216. 
217.                    str.append("> >> ");  
218. 
219.                }  
220. 
221.            }  
222.            str.append("]");  
223.        }  
224.        str.append("</span>");  
225. 
226.        try {  
227.            writer.write(str.toString());  
228.        } catch (IOException e) {  
229.            logger.error(e);  
230.        }  
231.        return result;  
232.    }  
233.//get set 方法区  
234.} 
public class Page extends Component {
 private static final Log logger = LogFactory.getLog(Page.class);
 public Page(ValueStack stack) {
  super(stack);
 }

 private String pageNo; // 当前页码

 private String totalPage; // 总页数

 private String totalNum; // 总记录数

 private String styleClass; // 分页的样式

 private String theme; // 分页的主题

 private String url; // action的路径

 private String urlType; // 路径的类型,主要用于URL重写的扩展

 private String queryParames;

 public String getQueryParames() {
  return queryParames;
 }

 public void setQueryParames(String queryParames) {
  this.queryParames = queryParames;
 }

 public boolean start(Writer writer) {
  boolean result = super.start(writer);
  
  Object obj = this.getStack().findValue(pageNo);

  pageNo = String.valueOf((Integer) obj);

  obj = this.getStack().findValue(totalPage);

  totalPage = String.valueOf((Integer) obj);

  obj = this.getStack().findValue(totalNum);
  totalNum = String.valueOf((Integer) obj);

  StringBuilder str = new StringBuilder();

  Map cont = this.getStack().getContext();

  StrutsRequestWrapper req = (StrutsRequestWrapper) cont
    .get(StrutsStatics.HTTP_REQUEST);

  if (url == null || "".equals(url)) {

   url = (String) req
     .getAttribute("javax.servlet.forward.request_uri");

  }
  String pageStr = "?totalNum=" + totalNum + "&pageNo=";

  if ("dir".equals(urlType)) {
   pageStr = "";

   if ("1".equals(pageNo)) {// 第一页时

    if (url.lastIndexOf("/") != url.length() - 1) {

     if (url.lastIndexOf("1") == url.length() - 1) {// 如果有页码1,则去掉1

      url = url.substring(0, url.length() - 1);

     } else if (url.lastIndexOf("/") != url.length() - 1) {// 如果没有页码1,并且最后不是'/'时,加上'/'

      url = url + "/";

     }

    }

   } else {

    url = url.substring(0, url.lastIndexOf("/") + 1);

   }

  }

  
  // 下面这段处理主要是用来处理动态查询的参数,并拼接成url
  StringBuffer perUrl = new StringBuffer("");
  obj = this.getStack().findValue(queryParames);
  if (!StringUtils.isObjNull(obj)) {
   perUrl.append("&").append("queryParames").append("=").append(
     StringUtils.decode((String) obj));
  }
  
  //当前页
  Integer cpageInt = Integer.valueOf(pageNo);
  str.append("<span> ");
  // 文本样式
  if (theme == null || "text".equals(theme)) {
   // 当前页与总页数相等
   if (pageNo.equals(totalPage)) {
    // 如果total = 1,则无需分页,显示“[第1页] [共1页]”
    if ("1".equals(totalPage)) {
     str.append("[第 " + pageNo + " 页]");

     str.append(" [共 " + totalPage + " 页]");

    } else {

     // 到达最后一页,显示“[首页] [上一页] [末页]”
     str.append("<a href='" + url + pageStr + "1" + perUrl
       + "'>[首  页]</a> ");

     str.append("<a href='" + url + pageStr + (cpageInt - 1)
       + perUrl + "'>[上一页]</a>");

     str.append("[下一页]");

     str.append(" <a href='" + url + pageStr + totalPage
       + perUrl + "'>[末  页]</a> ");

    }

   } else {

    // 当前页与总页数不相同
    if ("1".equals(pageNo)) {

     // 第一页,显示“[首 页] [下一页] [末页]”

     str.append("<a href='" + url + pageStr + "1" + perUrl
       + "'>[首  页]</a>");
     str.append("[上一页]");
     str.append("<a href='" + url + pageStr + (cpageInt + 1)
       + perUrl + "'>[下一页]</a>");
     str.append("<a href='" + url + pageStr + totalPage + perUrl
       + "'>[末  页]</a>");

    } else {

     // 不是第一页,显示“[首页] [上一页] [下一页] [末页]”

     str.append("<a href='" + url + pageStr + "1" + perUrl
       + "'>[首  页]</a>");

     str.append("<a href='" + url + pageStr + (cpageInt - 1)
       + perUrl + "'>[上一页]</a>");

     str.append("<a href='" + url + pageStr + (cpageInt + 1)
       + perUrl + "'>[下一页]</a>");

     str.append("<a href='" + url + pageStr + totalPage + perUrl
       + "'>[末  页]</a>");

    }

   }

  } else if ("number".equals(theme)) { // 数字样式 [1 2 3 4 5 6 7 8 9 10 >           // >>]
   Integer totalInt = Integer.valueOf(totalPage);
   // 如果只有一页,则无需分页
   str.append("[ ");
   if (totalInt == 1) {
    str.append("<strong>1</strong> ");
   } else {
    //当前页
    if (cpageInt > 1) {
     // 当前不是第一组,要显示“<< <”
     // <<:返回前一组第一页
     // <:返回前一页
     str.append("<a href='" + url + pageStr + "1" + perUrl
       + "'> << </a> ");
     str.append("<a href='" + url + pageStr + (cpageInt - 1)
       + perUrl);
     str.append("'><</a> ");
    } else {
     str.append("<< < ");
    }
    int v = (cpageInt - 4) > 0 ? (cpageInt - 4) : 1;
    int v1 = (cpageInt + 4) < totalInt ? (cpageInt + 4) : totalInt;
    if (v1 == totalInt) {
     v = totalInt - 10;
     v = (v <= 0 ? 1 : v); // 如果为负数,则修改为1

    } else if (v == 1 && v1 < totalInt) {
     v1 = totalInt > 10 ? 10 : totalInt;
    }
    // 10个为一组显示
    for (int i = v; i <= v1; i++) {
     if (cpageInt == i) { // 当前页要加粗显示
      str.append("<strong>" + i + "</strong> ");
     } else {
      str.append("<a href='" + url + pageStr + i + perUrl
        + "'>" + i + "</a> ");
     }
    }
    // 如果多于1组并且不是�

原创粉丝点击