JSP分页导航简单封装

数据量大了就需要进行分页,分页主要使用四个参数

RecordCount  总记录条数 这个基本上是固定的(条件确定后)

PageSize 页大小 这个可以根据自己的需要进行调

PageCount 总页数 上面两个确定这个基本确定

PageIndex 当前页码 这个是可以进行变化的,取值范围0到PageCount-1之间

这是分页的基本思想,在JSP中使用我们可以通过一个PageVo类对分页的导航进行简化处理,

我设计了这样一个分页辅助类:

PageVo.java

public class PageVo {
	private int recordCount;
	private int pageSize;
	private int pageCount;
	private int pageIndex;
	public int getRecordCount() {
		return recordCount;
	}
	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getPageCount() {
		return pageCount;
	}
	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}
	public int getPageIndex() {
		return pageIndex;
	}
	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}
	public PageVo(int recordCount, int pageSize, int pageCount, int pageIndex) {
		super();
		this.recordCount = recordCount;
		this.pageSize = pageSize;
		this.pageCount = pageCount;
		this.pageIndex = pageIndex;
	}
}


封装了上面四个变量,写了一个构造函数

数据访问层类使用这个辅助类

NewsDaoImpl.java

 

public class NewsDaoImpl extends DBM<NewsVo> implements NewsDao {
public List<NewsVo> findAllByPage(PageVo p) {
		int recordCount=Integer.parseInt(queryScalar("select count(*) from News").toString());
		p.setRecordCount(recordCount);
		int pageSize=p.getPageSize();
		int pageCount=recordCount/pageSize;
		if(recordCount%pageSize>0) pageCount++;
		p.setPageCount(pageCount);
		int pageIndex=p.getPageIndex();
		if(pageIndex<0) pageIndex=0;
		if(pageIndex>pageCount-1) pageIndex=pageCount-1;
		p.setPageIndex(pageIndex);		
		return query("select top "+pageSize+" * from news where nid not in (select top "+pageIndex*pageSize+" nid from news order by nid) order by nid");
	}
}


 使用前面写的dbuitls+反射!

JSP页面使用:

newsList.jsp

 <table border="1">
    	<tr>
    		<td>id</td>
    		<td>title</td>
    		<td>author</td>
    		<td>createDate</td>
    	</tr>
    	<%
    		int index=0;
    		if(request.getParameter("p")!=null){
    			index=Integer.parseInt(request.getParameter("p"));
    		}
    		PageVo p=new PageVo(0,10,0,index);
    		for(NewsVo n:new NewsBizImpl().findAllByPag(p)){
    		%>
    		<tr>
    		<td><%=n.getNid()%></td>
    		<td><%=n.getNtitle() %></td>
    		<td><%=n.getNauthor() %></td>
    		<td><%=n.getNcreateDate()%></td>
    		</tr>
    		<%
    		}
    	 %>    	 
      </table>


这最后少一行导航功能,我们可能需要这样一个导航功能:

下面的导航基本上是一样的,因此我们可以扩充PageVo.java在其中写一个方法生成导航,jsp页面变为:

 <table border="1">
    	<tr>
    		<td>id</td>
    		<td>title</td>
    		<td>author</td>
    		<td>createDate</td>
    	</tr>
    	<%
    		int index=0;
    		if(request.getParameter("p")!=null){
    			index=Integer.parseInt(request.getParameter("p"));
    		}
    		PageVo p=new PageVo(0,10,0,index);
    		for(NewsVo n:new NewsBizImpl().findAllByPag(p)){
    		%>
    		<tr>
    		<td><%=n.getNid()%></td>
    		<td><%=n.getNtitle() %></td>
    		<td><%=n.getNauthor() %></td>
    		<td><%=n.getNcreateDate()%></td>
    		</tr>
    		<%
    		}
    	 %>    	 
    	 <tr>
    	      	 </tr>
    </table>


我给PageVo增加了一个toNav的方法,用于生成导航功能:

对于导航我设计了两部分:

左边是一个<span class=info>共42页每页10条 共5页第1页</span> 右边是一个<span class=nav>首页 上一页 下一页 末页</span>

这样方便将来使用样式表进行扩充

最终的PageVo.java代码如下:

public class PageVo {
	private int recordCount;
	private int pageSize;
	private int pageCount;
	private int pageIndex;
	public int getRecordCount() {
		return recordCount;
	}
	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}
	public int getPageSize() {
		return pageSize;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public int getPageCount() {
		return pageCount;
	}
	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}
	public int getPageIndex() {
		return pageIndex;
	}
	public void setPageIndex(int pageIndex) {
		this.pageIndex = pageIndex;
	}
	public PageVo(int recordCount, int pageSize, int pageCount, int pageIndex) {
		super();
		this.recordCount = recordCount;
		this.pageSize = pageSize;
		this.pageCount = pageCount;
		this.pageIndex = pageIndex;
	}
	public String toNav(String jsp){
		StringBuilder sb=new StringBuilder();
		sb.append("<span class='info'>共"+recordCount+"页每页"+pageSize+"条 共"+pageCount+"页第"+(pageIndex+1)+"页</span>");
		sb.append("<span class='nav'>");
		if(pageIndex==0){
			sb.append("<span class='a'>首页</span> ");
			sb.append("<span class='a'>上一页</span> ");
		}
		else{
			sb.append("<a href='"+jsp+"?p=0'>首页</a> ");
			sb.append("<a href='"+jsp+"?p="+(pageIndex-1)+"'>上一页</a> ");
		}
		if(pageIndex>=pageCount-1){
			sb.append("<span class='a'>下一页</span> ");
			sb.append("<span class='a'>末页</span>");
		}
		else{
			sb.append("<a href='"+jsp+"?p="+(pageIndex+1)+"'>下一页</a> ");
			sb.append("<a href='"+jsp+"?p="+(pageCount-1)+"'>末页</a> ");
		}
		sb.append("</span>");
		return sb.toString();
	}
}

这里可以根据需要进行扩充和重载。


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
A:实现分页功能需要考虑以下几个步骤: 1. 在jsp页面中添加分页控件,比如使用bootstrap的分页控件。 2. 在Controller中添加处理分页请求的方法,这个方法需要接收当前页码、每页显示的记录数等参数。可以使用Spring提供的Pageable类来简化代码。 3. 在Service层中查询数据库中符合条件的数据,利用Mybatis提供的分页插件查询指定页码的数据。 4. 将查询结果返回给Controller层,再将结果封装成一个Page对象返回给jsp页面。 5. 在jsp页面中使用JSTL标签迭代Page对象的记录集合,渲染表格或其他控件显示数据。同时,使用bootstrap分页控件提供的方法实现翻页功能。 具体实现方式可以参考以下示例代码: 1. 在jsp页面中添加分页控件: ```html <div class="pagination"> <ul> <li><a href="#">Prev</a></li> <li class="active"><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">Next</a></li> </ul> </div> ``` 2. 在Controller中添加处理请求的方法: ```java @RequestMapping("/list") public String list(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, Model model) { // 查询指定页码的数据 Page<User> page = userService.findPage(pageNum, pageSize); // 将查询结果添加到model中传递给jsp页面 model.addAttribute("page", page); return "userList"; } ``` 3. 在Service层中查询数据,并使用Mybatis的分页插件实现分页查询: ```java @Override public Page<User> findPage(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userDao.findAll(); PageInfo<User> pageInfo = new PageInfo<>(userList); return new PageImpl<>(userList, PageRequest.of(pageNum - 1, pageSize), pageInfo.getTotal()); } ``` 4. 在jsp页面中使用JSTL标签迭代Page对象的记录集合,并渲染表格显示数据: ```html <table class="table table-bordered"> <thead> <tr> <th>编号</th> <th>姓名</th> <th>年龄</th> <th>性别</th> </tr> </thead> <tbody> <c:forEach items="${page.content}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> <td>${user.gender}</td> </tr> </c:forEach> </tbody> </table> ``` 5. 使用bootstrap分页控件提供的方法实现翻页功能: ```javascript $('.pagination').bootstrapPaginator({ currentPage: ${page.number + 1}, // 当前页码,注意要+1 totalPages: ${page.totalPages}, // 总页数 size: 'small', // 控件大小 onPageClicked: function (event, originalEvent, type, page) { // 点击页码时跳转到指定页码的地址 window.location.href = '/user/list?pageNum=' + page; } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值