ssm项目中翻页功能和模糊搜索功能的实现

在ssm项目中基本都会遇到信息管理,经常用到的一个功能是列表的翻页功能和搜索功能。这里就用户信息系统作简单介绍。

设计页面信息

要得到一个页面基本的信息。应该要知道一个页面最大能有几条信息,总共有多少页,总共有多少条信息以及当前是第几页。可以设计如下属性:

public class PageInfo<T> {
    private List<T> list;
    private int size;
    private int totalPage;
    private int totalCount;
    private int currentPage;
    getter() setter()...
  }

设计数据库操作

既然是分页显示,就不是一次性显示全部的内容了。用limit语句从数据库中取出指定范围的元素。
这里可以在select的时候就加入模糊匹配。用数据库自带的通配符就可以实现:

重新设计dao层的findAll接口这里findAll就是返回某一页的数据了:

List<User> findAll(@Param("start") int start,@Param("username") String username);
<select id="findAll" resultType="user">
        select * from user_tb
        <if test="username!=null and username!= '' ">
            where username like concat("%",#{username},"%")
        </if>
        limit ${start},5
</select>

编写服务层方法

根据传入的信息,构造一个pageInfo对象并传出。
总页数可以通过dao.getTotalCount()得出,用户信息列表可以通过dao.findAll()得出。根据dao层信息整合得到pageInfo

  @Override
    public PageInfo<User> findAll(int currentPage, String username) {
        PageInfo<User> pageInfo=new PageInfo<>();
        pageInfo.setSize(5);
        int tc=userDao.getTotalCount(username);
        pageInfo.setTotalCount(tc);
        //tp为总页数
        int tp=(int)Math.ceil(tc/5.0);
        pageInfo.setTotalPage(tp);

        if(currentPage<1){
            pageInfo.setCurrentPage(1);
        }else if(currentPage>tp){
            pageInfo.setCurrentPage(tp);
        }else{
            pageInfo.setCurrentPage(currentPage);
        }
        //0,5
        int start=(pageInfo.getCurrentPage()-1)*5;
        List<User> userList=userDao.findAll(start,username);
        pageInfo.setList(userList);
        return pageInfo;
    }

编写控制层方法

注意这里传入的参数。在session中暂时存储当前的搜索名字。如果不存,在搜索的时候调用findAll方法就不知道用户搜索的时候填入的信息了。这里的type就是用来指示是否是显示搜索。

  @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage, String username,
                                @RequestParam(defaultValue = "0") int type, HttpSession session){
        if(type==1){
            session.setAttribute("searchName",username);
        }else{
            username=(String) session.getAttribute("searchName");
        }
        PageInfo<User>pageInfo=userService.findAll(currentPage,username);
        ModelAndView mv=new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }

完善jsp页面

给jsp页面添加页数转换按键:
在按下不同的按键后,传入不同的页码数,调用controller层的findAll()方法。

<div class="box-tools pull-right">
                        <ul class="pagination">
                            <li><a href="/user/findAll.do" aria-label="Previous">首页</a></li>
                            <li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage-1}">上一页</a></li>
                            <c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
                                <li><a href="/user/findAll.do?currentPage=${pageNum}">${pageNum}</a> </li>
                            </c:forEach>
                            <li><a href="/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
                            <li><a href="/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a></li>
                        </ul>
                    </div>

测试

翻页功能
在这里插入图片描述
搜索功能:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42189888/article/details/107548582
今日推荐