S2SH整合以及图片上传(12)之分页显示

    本篇文章,我们来讲分页显示。

    分页一直都是做web开发流程中不可或缺的部分。

    且,本篇文章也是《S2SH整合以及图片上传》这一系列文章的最后一篇,所有关于S2SH的基本操作都已经在本套系列文章中讲述完毕。

    话不多说,下面来看具体操作。

    第一步,我们需要在index.jsp页面中添加一个选项:

    

    代码如下:

<a href="${pageContext.request.contextPath}/person/personPage!listByPage">分页显示人员</a>

    第二步,我们需要在src目录下新建一个工具包,其中用来存储分页类的实体类PageShow:

        

    PageShow类的代码如下:

package com.ssh.util;

public class PageShow {
	// 此类用于分页
	private int pageNow;// 当前页
	private int totalSize;// 总条数
	private int totalPage;// 总页数
	private int pageSize = 10;// 每页显示条数
	private boolean hasPre;// 是否有上一页
	private boolean hasNext;// 是否有下一页
	private boolean hasFirst;// 是否有首页
	private boolean hasLast;// 是否有尾页

	public PageShow(int pageNow, int totalSize) {
		// 构造方法
		this.setPageNow(pageNow);
		this.setTotalSize(totalSize);
	}

	public PageShow(int pageNow, int totalSize, int pageSize) {// 可动态改变每页条数
		// 构造方法
		this.setPageNow(pageNow);
		this.setTotalSize(totalSize);
		this.pageSize = pageSize;
	}

	public void setPageNow(int pageNow) {// 得到当前页
		this.pageNow = pageNow;
	}

	public int getPageNow() {
		return pageNow;
	}

	public void setTotalSize(int totalSize) {// 总条数
		this.totalSize = totalSize;
	}

	public int getTotalSize() {
		return totalSize;
	}

	public void setPageSize(int pageSize) {// 每页显示条数
		this.pageSize = pageSize;
	}

	public int getPageSize() {
		return pageSize;
	}

	public int getTotalPage() {// 总页数 = 总条数/每页显示条数
		totalPage = this.getTotalSize() / this.getPageSize();
		if (this.getTotalSize() % this.getPageSize() != 0) {
			totalPage++; // 若余数为不0 则要多加一页
		}
		return totalPage;
	}

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

	public boolean isHasPre() {// 是否有上一页 除第一页以外都有上一页 说明有首页的就有上一页
		if (this.isHasFirst()) {
			return true;
		} else
			return false;
	}

	public void setHasPre(boolean hasPre) {
		this.hasPre = hasPre;
	}

	public boolean isHasNext() {// 是否有下一页 除最后一页以外都有下一页 说明有尾页的就有下一页
		if (this.isHasLast()) {
			return true;
		} else
			return false;
	}

	public void setHasNext(boolean hasNext) {
		this.hasNext = hasNext;
	}

	public boolean isHasFirst() {// 是否有首页 除第一页以外都有首页
		if (this.pageNow == 1)// 是第一页就没有首页
			return false;
		else
			return true;
	}

	public void setHasFirst(boolean hasFirst) {
		this.hasFirst = hasFirst;
	}

	public boolean isHasLast() {// 是否有尾页 除最后一页以外都有尾页
		if (pageNow == this.getTotalPage()) {// 最后一页
			return false;
		} else
			return true;
	}

	public void setHasLast(boolean hasLast) {
		this.hasLast = hasLast;
	}
}

    第三步,我们在PersonDao接口中添加如下方法:

    

    代码如下:

    // 查询所有用户 分页
    public List<Person> findAllPerson(int pageNow, int pageSize);    
    // 所有用户个数 
    public int findPersonSize();

    第四步,我们需要在PersonDaoImpl类中实现该方法:

	// 查询所有用户 分页 
	@SuppressWarnings("unchecked")
	@Override
	public List<Person> findAllPerson(int pageNow, int pageSize) {
        String hql = "from Person";  
        Query query = sessionFactory.getCurrentSession().createQuery(hql);//执行查询操作  
        query.setFirstResult((pageNow - 1) * pageSize);  
        query.setMaxResults(pageSize);  
        List<Person> personList = query.list();  
        if (personList.size() > 0) {  
            return personList;  
        }  
  
        return null;
	}

	// 所有用户个数 
	@Override
	public int findPersonSize() {
		String hql = "from Person";
		int size = sessionFactory.getCurrentSession().createQuery(hql).list().size();
		return size;
	}

    第五步,在PersonService接口中添加如下方法:

    

    代码如下:

    // 查询所有用户 分页 
    public List<Person> findAllPerson(int pageNow, int pageSize);   
    // 所有用户个数 
    public int findPersonSize();

    第六步,我们需要在PersonServiceImpl类中实现该方法:

	// 查询所有用户 分页 
	@Override
	public List<Person> findAllPerson(int pageNow, int pageSize) {
        List<Person> personList = this.personDao.findAllPerson(pageNow, pageSize);  
        return personList; 
	}

	// 所有用户个数 
	@Override
	public int findPersonSize() {
		
		return this.personDao.findPersonSize(); 
	}

    第七步,这里是分页显示,我们特别的,新建一个Action来处理它PersonPageAction:

package com.ssh.action;


import java.util.List;
import java.util.Map;

import javax.annotation.Resource;



import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.ssh.po.Person;
import com.ssh.service.PersonService;
import com.ssh.util.PageShow;

public class PersonPageAction extends ActionSupport{
	
	private static final long serialVersionUID = 1L;
	
	@Resource
	private PersonService personService;
	
	private int pageNow = 1;// 动态改变 页面取得  
    private int pageSize = 2;// 固定不变 
    
    public int getPageNow() {
		return pageNow;
	}

	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
    
    //分页
    @SuppressWarnings({ "rawtypes", "unchecked" })
	public String listByPage() {  
        List<Person> personList = personService.findAllPerson(pageNow, pageSize); 
        if (personList.size()!=0) {// 用户列表  
            Map session = ActionContext.getContext().getSession();  
            Map request = (Map) ActionContext.getContext().get("request");  
            session.put("personList", personList);// 保存在session  
            PageShow page = new PageShow(pageNow, personService.findPersonSize(), pageSize);// 实例化分页对象  
            request.put("page", page);// 保存到request  
            return SUCCESS;  
        }  
        return ERROR;  
    }  
}

    第八步,我们需要在struts.xml中配置一个action,如下:

    

    代码如下:

       <action name="personPage" class="personPageAction">
       		<result name="success">/listByPage.jsp</result>
       </action>

    第九步,因为我们的struts中的action交给了spring来管理,所以我们需要在applicationContext.xml中配置一下新建的PersonPageAction:

    

    代码如下:

<bean id="personPageAction" class="com.ssh.action.PersonPageAction" scope="prototype" />

    第十步,我们新建一个用来分页显示的listByPage.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>List Person Page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
</head>

<body>
   	<h2>S2SH整合以及图片上传</h2>
   	<h2>显示人员</h2>
	<table border="1">
		<tr>
			<td>用户id</td>
			<td>用户姓名</td>
			<td>用户图片路径</td>
			<td>删除用户</td>
			<td>修改用户</td>
		</tr>
		<c:forEach items="${personList}" var="person">
			<tr>
				<td>${person.id}</td>
				<td>${person.name}</td>
				<td>${person.imgurl}</td>
				<td>
				<a href="${pageContext.request.contextPath}/person/person!delete?id=${person.id }&imgurl=${person.imgurl}">删除用户</a>
				</td>
				<td>
				<a href="${pageContext.request.contextPath}/person/person!goUpdate?id=${person.id }">修改用户</a>
				</td>
			</tr>
		</c:forEach>
		<s:set name="page" value="#request.page"></s:set>
		<tr>
			<td colspan="9">当前是第<s:property value="#page.pageNow" />页,共<s:property
					value="#page.totalPage" />页 
				<s:if test="#page.hasFirst">
					<a href="${pageContext.request.contextPath}/person/personPage!listByPage?pageNow=1">首页</a>
				</s:if> <s:if test="#page.hasPre">
					<a href="${pageContext.request.contextPath}/person/personPage!listByPage?pageNow=<s:property value="#page.pageNow-1"/> "
						>上一页</a>
				</s:if> <s:if test="#page.hasNext">
					<a href="${pageContext.request.contextPath}/person/personPage!listByPage?pageNow=<s:property value="#page.pageNow+1" />"
						>下一页</a>
				</s:if> <s:if test="#page.hasLast">
					<a href="${pageContext.request.contextPath}/person/personPage!listByPage?pageNow=<s:property value="#page.totalPage"/>"
						>尾页</a>
				</s:if></td>
		</tr>
	</table>
	<hr />
	<c:forEach items="${personList}" var="person">
		<dl>
			<dt>
				<img src="${pageContext.request.contextPath}/${person.imgurl}" alt="图片无法显示" height="200" width="300"/>
			</dt>
			<dd>
				<ul>
					<li>
						<p>${person.id}</p>
					</li>
					<li>
						<p>${person.name}</p>
					</li>
				</ul>
			</dd>
		</dl>
	</c:forEach>
</body>
</html>

    第十一步,测试:

    


    至此,分页显示完成!

    S2SH整合以及图片上传(1)之spring搭建

    S2SH整合以及图片上传项目源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值