使用struts2 hibernate spring整合实现新闻信息管理系统案例-实现新闻信息分页显示功能

来源:互联网 发布:隔壁老王出处 知乎 编辑:程序博客网 时间:2024/05/20 11:25

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

项目结构图

新闻系统项目结构图
这里写图片描述


使用到jar包

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

项目所需要jar


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

首先,我们需要根据页数去显示信息,那么我就在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 = 2;        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-1)*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()>0)        {            return list.get(0).intValue();        }        return 0;    }

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>

项目运行的结果

这里写图片描述


这里写图片描述


这里写图片描述


总结一下

初学者来说认真的了解一下上面PageBean封装的想法是非常重要的。而且非常有用,认真思考一下如果需要取多个数据放在同一个action中那么我们是不是可以使用Bean类去封装数据呢。
分页显示的这个PageBean不只可以用在查询新闻类型上,而且还可以使用在新闻查询数据的上面,代码量因为一个泛型就可以不用再写另外的Bean类去显示相似功能。

原创粉丝点击