天天看点

使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果

实现新闻信息分页显示功能

项目结构图

使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果
使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果

使用到jar包

struts-2.5.10 、 hibernate-release-5.2.2.Final 、spring-framework-4.3.8.RELEASE-dist

使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果

如何实现三个框架的整合我会在另外一个文章上面写,这篇文章主要是写一个分页显示新闻这个功能怎么实现的。那么就接下来走进正题吧。

首先,我们需要根据页数去显示信息,那么我就在CategoryAction中写一个需要根据页数取数据的方法。

下面所有代码都在原有的代码的基础上添加的

CategoryAction.java

记得在struts.xml中配置action

private int currPage;//需要提供的页数
public void setCurrPage(int currPage) {
    this.currPage = currPage;
}

public String findallbypage()
{  //思路1.必须在先在categoryService中调用findbyPage(currPage)才能获取数据
   /*思路2.那么我们应该拿些什么数据呢?
           每一页应该显示些什么?
   1 当前页数
   2 每页最多显示的纪录
   3 总的纪录数
   4 总的页数
   5 总的页数  
   */
   //思路3.得到数据怎么存放,那么就要新建一个PageBean 封装数据了。
   //思路5.在categoryService的接口中添加这个方法在categoryService实现类中实现这个方法把数据进行封装。
   PageBean<Category> pageBean= categoryService.findbyPage(currPage);
   //将pageBean存放在值栈中
   ActionContext.getContext().getValueStack().push(pageBean);
    return "page";  //返回一个字符串对应result。
}
           

PageBean.java

import java.util.List;

/*
 *类的说明:分页封装类
 * */
public class PageBean<T> {
   private int currPage;//当前页数
   private int pageSize;//每页最多显示的纪录
   private int totalCount;//总的纪录数
   private int totalPage;//总的页数

   //思路4.因为需要分页显示不同对象使用到泛型
   private List<T> list;//每页显示的数据,T的值是所需数据的对象
   /*
    此处省略各个属性的get() set()方法必须写
*/
           

CategoryService.java

public interface CategoryService {
/*
..
..
*/
public PageBean<Category> findbyPage(int currPage);
}
           

CategoryServiceImpl .java //实现类

public class CategoryServiceImpl implements CategoryService  {
/*
..
..
*/
//分页查询类别的方法
public PageBean<Category> findbyPage(int currPage) {
        PageBean<Category> pageBean =new PageBean<Category>();
        //数据封装
        //封装当前的页数CurrPage
        pageBean.setCurrPage(currPage);
        //封装每页最多显示的纪录数 设置一个Pagesize的值
        int pageSize = ;
        pageBean.setPageSize(pageSize);
        //封装总的记录数TotalCount
        int totalCount =categoryDao.findCount();//findCount()方法在DAO接口上新建
        pageBean.setTotalCount(totalCount);
        //封装总的页数totalPage
        double tc=totalCount;
        Double totalPage=Math.ceil(tc/pageSize);
        pageBean.setTotalPage(totalPage.intValue());
        //封装每页显示的数据list
        int begin=(currPage-)*pageSize;
        //在DAO接口上新建finbypage(begin,pageSize)@begin:从第几页开始
        List<Category> list=categoryDao.finbypage(begin,pageSize);
        pageBean.setList(list);
        return pageBean;
    }
           

CategoryDao .java//Dao接口

public interface CategoryDao {
/*
..
..
*/
    public List<Category> finbypage(int begin, int pageSize);
    public int findCount();
}
           

CategoryDaoImpl .java /DAO实现类

public class CategoryDaoImpl extends HibernateDaoSupport implements CategoryDao{
     /*
     ..
     */
     /*
     * 分页查询部门
     * */
    public List<Category> finbypage(int begin, int pageSize) {

        DetachedCriteria criteria =DetachedCriteria.forClass(Category.class);
        //重点是调用findByCriteria(?,?,?);这个方法取得数据。
        List<Category> list=(List<Category>) this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize);

        return list;
    }

    public int findCount() {
        String hql="select count(*) from Category";
        List<Long> list=(List<Long>) this.getHibernateTemplate().find(hql);
        if(list.size()>)
        {
            return list.get().intValue();
        }
        return ;
    }
           

JSP页面显示代码:直接调用的是PageBean封装类中的属性。currPage pageSize totalCount totalPage list

<table border="1">
    <s:iterator value="list" var="c">
    <tr>
    <td><s:property value ="#c.categoryName"/>
    </td>
    </tr>
    </s:iterator>
    </table>
    <table>
     <tr>
     <td>
     <span>第<s:property value="currPage"/>/<s:property value="totalPage"/>页</span>&nbsp;&nbsp;
     <span>总的记录数:<s:property value="totalCount"/>&nbsp;&nbsp;每页显示:<s:property value="pageSize"/></span>     
     </td>
     </tr>
     <tr>
     <td>
     <span>
     <s:if test="currPage!=1">
     <a href="/Newproject/findallbypageAction.action?currPage=1">[首页]</a>&nbsp;&nbsp;
     <a href="/Newproject/findallbypageAction.action?currPage=<s:property value="currPage-1"/>">[上一页]</a>
     </s:if>
     <s:if test="currPage!=totalPage">
     <a href="/Newproject/findallbypageAction.action?currPage=<s:property value="currPage+1"/>">[下一页]</a>&nbsp;&nbsp;
     <a href="/Newproject/findallbypageAction.action?currPage=<s:property value="totalPage"/>">[尾页]</a>
     </s:if>
     </span>
     </td>
     </tr>
    </table>
           

项目运行的结果

使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果
使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果
使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能实现新闻信息分页显示功能项目运行的结果

总结一下

初学者来说认真的了解一下上面PageBean封装的想法是非常重要的。而且非常有用,认真思考一下如果需要取多个数据放在同一个action中那么我们是不是可以使用Bean类去封装数据呢。

分页显示的这个PageBean不只可以用在查询新闻类型上,而且还可以使用在新闻查询数据的上面,代码量因为一个泛型就可以不用再写另外的Bean类去显示相似功能。