加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

如何自己封装一个可搜索式的带页码上页下页的分页组件?

发布时间:2024-01-06 15:26:57 所属栏目:资讯 来源:互联网
导读:  本篇内容介绍了“如何自己封装一个可搜索式的带页码上页下页的分页组件?”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况

  本篇内容介绍了“如何自己封装一个可搜索式的带页码上页下页的分页组件?”的有关知识,在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

  分页功能的代码就是这样的,在需要展示列表的页面,我们基本都需要加上分页功能,如果某天boss想要修改分页功能的样式,我们不能去一个一个的改吧。

  下边给大家分享一个自己封装的通用分页组件。

  1. 效果展示

  2. 使用方式

  1 )在需要显示分页信息的位置,直接引入pagination.jsp页面。

  

  <%@include file="/WEB-INF/decorators/pagination.jsp" %>

  

  2 )在java代码中

  Controller层代码:

  @RequiresPermissions("func_vasadmin_userMoneyList")

  @RequestMapping("/user/money/list")

  public String list(Model model, ServletRequest request) {

  // 获取所有的查询条件参数(为了使用方便,所有查询条件的参数命名前缀都是"search_")

  Map searchParams = WebUtils.getParametersStartingWith(request, "search_");

  // 获取分页页码信息和每页条数

  int pageNum = PageUtil.getTargetPage(request);

  int pageSize = PageUtil.getPageSize(request);

  Page page = new Page(pageSize, pageNum);

  // 查询需要展示的内容

  List list = vasMoneyService.getUserMoneyList(page,searchParams);

  model.addAttribute("data", list);

  model.addAttribute("page", page);

  // 将搜索条件编码成字符串,用于排序,分页的URL

  model.addAttribute("searchParams", PageUtil.encodeParameterStringWithPrefix(searchParams, "search_"));

  return "vasadmin/user_money_list";

  }

  Service层代码:

  public List getUserMoneyList(Page page,

  Map searchParams) {

  // 从map中获取查询条件

  long userId = (Long) DataConvertUtil.data2(searchParams.get("userId"),

  DataConvertUtil.DataType.LONG);

  long minMoney = (Long) DataConvertUtil.data2(

  searchParams.get("minMoney"), DataConvertUtil.DataType.LONG);

  long maxMoney = (Long) DataConvertUtil.data2(

  searchParams.get("maxMoney"), DataConvertUtil.DataType.LONG);

  // 查询总条数

  int totleElements = vasMoneyDao.getUserMoneyListCount(

  DataBaseName.DB_TATA_MONEY, userId, minMoney, maxMoney);

  // 设置总条数

  page.setTotleElements(totleElements);

  // 查询需要展示的数据

  return vasMoneyDao.getUserMoneyList(DataBaseName.DB_TATA_MONEY, userId,

  minMoney, maxMoney, page.getStartNum(), page.getEndNum());

  }

  **每次需要分页,只需要操作上边这两步,是不是很简单啊~~。**接下来,给大家贴出封装的pagination.jsp代码,和其它的一些帮助类的代码。

  **3. 代码示例 **

  pagination.jsp (封装的通用分页代码)

  <%@ page language="java" pageEncoding="UTF-8"%>

  <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

  <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

  

  

 

  

 

  每次显示

  

 

  

 

  

 

  

 

  

  

 

  

 

  

  

  

 

  

 

  

  

  

  

  

 

  

  

  

 

  

  

  

  

  

 

  

 

  

  

  

 

  

 

  

  

  • 共 ${page.totlePages} 页,${page.totleElements}

     

      条

  • 首页
  • 上一页
  •   href="?pageNum=1&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" >首页

  •   href="?pageNum=${page.prePage}&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" >上一页

  •   href="?pageNum=${i}&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" rel="external nofollow" >${i}

  •   href="?pageNum=${i}&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" rel="external nofollow" >${i}

  •   href="?pageNum=${page.nextPage}&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" >下一页

  •   href="?pageNum=${page.totlePages}&pageSize=${page.pageSize}&${searchParams}" rel="external nofollow" >末页

  • 下一页
  • 末页

 

  

 

  

 

  

  Page.java (分页信息类)

  public class Page implements Serializable {

  private static final long serialVersionUID = 1L;

  public Page(int pageSize, int pageNum) {

  if(pageSize > 0 ){

  this.pageSize = pageSize;

  }

  if(pageNum > 0){

  this.pageNum = pageNum;

  }

  }

  /**

  * 初始化各个值

  */

  public void initValue(){

  // 计算总共有多少页

  totlePages = (int)Math.ceil(totleElements * 1.0 / pageSize);

  if(totlePages == 0){

  totlePages = 1;

  }

  // 页码矫正

  if(pageNum <= 0){

  pageNum = 1;

  }

  if(pageNum > totlePages){

  pageNum = totlePages;

  }

  // 是否有上一页和首页

  if(pageNum > 1){

  hasPrevious = true;

  prePage = pageNum - 1;

  }

  // 是否有下一页和尾页

  if(totlePages > pageNum){

  hasNext = true;

  nextPage = pageNum + 1;

  }

  // 分页页码开始数值

  begin = Math.max(1, pageNum - paginationSize/2);

  // 分页页码结束数值

  end = Math.min(begin + (paginationSize - 1), totlePages);

  }

  /**

  * 分页下标最多显示多少页

  */

  private int paginationSize = 10;

  /**

  * 页码开始

  */

  private int begin = 1;

  /**

  * 页码结束

  */

  private int end = 1;

  /**

  * 每页显示多少条

  */

  private int pageSize = 15;

  /**

  * 当前页码

  */

  private int pageNum = 1;

  /**

  * 是否有下一页

  */

  private boolean hasNext = false;

  /**

  * 是否有上一页

  */

  private boolean hasPrevious = false;

  /**

  * 下一页的页码

  */

  private int nextPage;

  /**

  * 上一页的页码

  */

  private int prePage;

  /**

  * 总页数

  */

  private int totlePages = 1;

  /**

  * 总条数

  */

  private int totleElements = 0;

  public static int maxNum = 999999;

  public int getPaginationSize() {

  return paginationSize;

  }

  public void setPaginationSize(int paginationSize) {

  this.paginationSize = paginationSize;

  }

  public int getBegin() {

  return begin;

  }

  public void setBegin(int begin) {

  this.begin = begin;

  }

  public int getEnd() {

  return end;

  }

  public void setEnd(int end) {

  this.end = end;

  }

  public int getPageSize() {

  return pageSize;

  }

  public void setPageSize(int pageSize) {

  this.pageSize = pageSize;

  }

  public int getPageNum() {

  return pageNum;

  }

  public void setPageNum(int pageNum) {

  this.pageNum = pageNum;

  }

  public boolean isHasNext() {

  return hasNext;

  }

  public void setHasNext(boolean hasNext) {

  this.hasNext = hasNext;

  }

  public boolean isHasPrevious() {

  return hasPrevious;

  }

  public void setHasPrevious(boolean hasPrevious) {

  this.hasPrevious = hasPrevious;

  }

  public int getNextPage() {

  return nextPage;

  }

  public void setNextPage(int nextPage) {

  this.nextPage = nextPage;

  }

  public int getPrePage() {

  return prePage;

  }

  public void setPrePage(int prePage) {

  this.prePage = prePage;

  }

  public int getTotlePages() {

  return totlePages;

  }

  public void setTotlePages(int totlePages) {

  this.totlePages = totlePages;

  }

  public int getTotleElements() {

  return totleElements;

  }

  public void setTotleElements(int totleElements) {

  this.totleElements = totleElements;

  // 知道总条数之后,初始化一下其它值

  initValue();

  }

  public static void main(String[] args) {

  System.out.println(Math.min(1, 2));

  }

  /**

  * 从第几条开始查询

  * @return

  */

  public int getStartNum(){

  return (pageNum -1) * pageSize + 1;

  }

  /**

  * 到第几条结束

  * @return

  */

  public int getEndNum(){

  return pageNum * pageSize;

  }

  }

  PageUtil.java (分页辅助类)

  public class PageUtil implements Serializable {

  private static final long serialVersionUID = 1L;

  /**

  * 获取目标页码

  * @return

  */

  public static int getTargetPage(ServletRequest request){

  int pageNum = 0;

  String pageNumStr = request.getParameter("pageNum");

  if(StringUtils.isNotBlank(pageNumStr)){

  try{

  pageNum = Integer.valueOf(pageNumStr);

  }catch(Exception e){

  pageNum = 0;

  }

  }

  return pageNum;

  }

  /**

  * 获取每页条数

  * @return

  */

  public static int getPageSize(ServletRequest request){

  int pageSize = 0;

  String pageSizeStr = request.getParameter("pageSize");

  if(StringUtils.isNotBlank(pageSizeStr)){

  try{

  pageSize = Integer.valueOf(pageSizeStr);

  }catch(Exception e){

  pageSize = 0;

  }

  }

  return pageSize;

  }

  /**

  * 将Map中的查询条件,加上前缀,以&拼接

  * @param map

  * @param prefix 每个参数的前缀

  * @return

  */

  public static String encodeParameterStringWithPrefix(Map map, String prefix){

  if(null == map || map.isEmpty()){

  return "";

  }

  StringBuffer sb = new StringBuffer();

  Iterator> entries = map.entrySet().iterator();

  while (entries.hasNext()) {

  if(StringUtils.isNotEmpty(sb.toString())){

  sb.append("&");

  }

  Map.Entry entry = entries.next();

  sb.append(prefix);

  sb.append(entry.getKey());

  sb.append("=");

  sb.append(entry.getValue());

  }

  return sb.toString();

  }

  }

  jsp页面中查询条件参数编写示例如下:

  

  

 

  

  源码下载地址:分页源码

  以上就是关于“如何自己封装一个可搜索式的带页码上页下页的分页组件?”的介绍了,感谢各位的阅读,希望这篇文章能帮助大家解决问题。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章