第二天

Posted xxiaobai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二天相关的知识,希望对你有一定的参考价值。

一、分页功能

1、业务逻辑流程

? 用户通过点击按钮触发按钮事件,然后将需要展示的页的页码传递给服务器java程序,Controller通过分析URL调用findByPage方法,findByPage通过调用userService中相应的方法将参数传入Service层,userService通过调用userDao的findByPage方法将参数传入DAO层,findByPage方法通过MyBatis的ORM机制查询到数据库,并返回相应的数据。

? 查询到的数据原路返回,在Controller的findByPage中生成一个modelView,然后将数据填入其中,返回给用户一个渲染好的页面。

2、代码展示

  • 前端
                        <!-- 分页 -->
                        <ul class="pagination">
                            <li>
                                <a href="${pageContext.request.contextPath}/user/findAll?currentPage=1" aria-label="Previous">首页</a>
                            </li>
                            <li><a href="${pageContext.request.contextPath}/user/findAll?currentPage=${pageInfo.currentPage - 1}">上一页</a></li>

                            <c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
                                <li><a href="${pageContext.request.contextPath}/user/findAll?currentPage=${pageNum}">${pageNum}</a></li>
                            </c:forEach>

                            <li><a href="${pageContext.request.contextPath}/user/findAll?currentPage=${pageInfo.currentPage + 1}">下一页</a></li>
                            <li>
                                <a href="${pageContext.request.contextPath}/user/findAll?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a>
                            </li>
                        </ul>

  • 后端

    • Controller
    @RequestMapping("/findAll")
    public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage){
        ModelAndView mv = new ModelAndView();
        PageInfo<User> pageInfo = userService.findByPage(currentPage);
        // 将数据返回到页面上
        mv.setViewName("dataList");
        mv.addObject("pageInfo", pageInfo);
        return mv;
    }
    
    
    • Service
     @Override
        public PageInfo<User> findByPage(int currentPage) {
            PageInfo<User> pageInfo = new PageInfo<>();
            pageInfo.setSize(4);
            
            // 指定总数据量
            int totalCount = userDao.getTotal();
            pageInfo.setTotalCount(totalCount);
    
            // 指定总页数
            int totalPage = (int) Math.ceil(totalCount / (double)pageInfo.getSize());
            pageInfo.setTotalPage(totalPage);
    
            // 判断当前页是否合理
            if (currentPage < 1) {
                pageInfo.setCurrentPage(1);
            }
            else{
                pageInfo.setCurrentPage(Math.min(currentPage, totalPage));
            }
    
            // 指定当前页的数据   指定sql语句中的两个参数
            int start = (pageInfo.getCurrentPage() - 1) * pageInfo.getSize();
            List<User> list = userDao.findAllByPage(start, pageInfo.getSize());
            pageInfo.setList(list);
    
            return pageInfo;
        }
    
    • MyBatis的xml映射文件
    <select id="findAllByPage" parameterType="int" resultType="User">
        select * from t_user limit #{start}, #{size};
    </select>
    
    

二、Ajax

? Asynchronous javascript And Xml,前后端分离的基础,通过对资源的异步请求和访问,可以分离静态资源和动态资源,在开发过程中体现为前后端开发的分离进行。

1、一般流程

? 前端通过Ajax请求将请求参数通过JSON格式(一般)传递给服务器,并规定服务器返回数据的类型。通过回调函数接受和处理服务器返回的数据,并更新页面。

? 在这个过程中,JS负责接受和处理服务器返回的数据并更新页面,服务器仅负责生成前端需要的数据。也就是说,静态资源(html、CSS)和动态资源(数据)是在前端完成组合的,而不是在服务器,这是Ajax和JSP的不同。

2、一个不完整的Ajax例子(以search功能为例)

  • 前端

        // search --- not ok
        function search() {
            let username = $("#search-text").val();
            $.ajax({
                type : "POST",
                data: {
                    "username" : username,
                },
                url: "${pageContext.request.contextPath}/user/search",
                success: function(){	// 回调函数,在这未起到作用
                    alert("search successfully.");
                },
                error: function(){
                    alert("search failed.");
                }
    
            })
        }
    
    
  • 后端(Controller)

        @RequestMapping("/search")
        // 获取ajax前端传递的参数
        public ModelAndView search(@RequestParam(value = "username") String username){
            List<User> users = userService.findByName(username);
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.addObject("pageInfo",users);
            modelAndView.setViewName("dataList");
            return modelAndView;
        }
    
  • 可以看出,上述过程并未体现Ajax技术的初衷,界面的渲染依旧实在服务器完成的,然后返回一个完整的界面。

以上是关于第二天的主要内容,如果未能解决你的问题,请参考以下文章

冲刺第二天

冲刺第二天

学习Python第二天

js第基础第二天(代码调试)

Beta冲刺 第二天

Beta冲刺-第二天