第二天(代码片段)

xxiaobai xxiaobai     2022-12-08     608

关键词:

一、分页功能

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技术的初衷,界面的渲染依旧实在服务器完成的,然后返回一个完整的界面。

第二天java基础(代码片段)

第二天JAVA基础变量在程序运行中值可以变化的量;类型变量名;变量的作用域packagecom.zhang.Base;//Demo05类名publicclassDemo05/**变量按照作用域来分有三种:*类变量实例变量局部变量**///类变量staticstaticdoublesalary=3000;//整个类中可使用s... 查看详情

第二天(代码片段)

一、分页功能1、业务逻辑流程? 用户通过点击按钮触发按钮事件,然后将需要展示的页的页码传递给服务器java程序,Controller通过分析URL调用findByPage方法,findByPage通过调用userService中相应的方法将参数传入Service层,userService通过... 查看详情

团队冲刺第二天(代码片段)

昨天完成了主页面的设计今天至少完成一俩个功能按钮里面的界面。进制转化:Stringstr=newBigInteger("number",i).toString(j);System.out.println(str);i进制的number转化成j进制行列式:java中的高效矩阵运算包Ejml的使用 查看详情

基础学习之第二天(代码片段)

 一.格式化输出              现在有以下需求,让用户输入name,age,job,hobby然后输出如下所示:------------infoofAlexLi-----------Name:AlexLiAge22job:TeacherH 查看详情

第二天,ansible源码学习(代码片段)

按照我的理解,源码学习肯定是一边看代码,一边执行程序验证。执行的命令是:ansiblesz003-a"ls-l"下面是ansible.py源码,学习分析以注释的形式出现########################################################from__future__import(absolute_import,divis... 查看详情

初识python第二天(代码片段)

一.传递参数2.1新建Python文件,名为hello_args.py,输入以下代码1importsys2print(sys.argv)通过pythonhello_args.py,屏幕打印输出[‘hello_args.py‘]pythonhello_args.pyhelloworld屏幕打印输出[‘hello_args.py‘,‘hello‘,‘world‘]默认文件名本身是argv[0],属... 查看详情

第二天(代码片段)

2020-03-30还行吧,今天也是一样弄那些包,开心的还是有一个girl聊天勒在准备下班的时候,我和老板老板娘聊天了,他们都不是很喜欢这个girl,可能是年纪小,可能是不太懂做人,当然今天的开心呢也是他们有一丢丢看中我,不过谈到公众... 查看详情

复习第十二天(代码片段)

1.如何实现向下转型?需要注意什么问题?如何解决此问题?Personp=newMan();使用强转符:()Manm=(Man)p;可能ClassCastException异常。使用instanceof在进行向下转型前判断。if(pinstanceofMan)Manm=(Man)p;2.==和equa 查看详情

开始学习python的第二天(代码片段)

一、练习题1.使用while循环输入1234568910#第一种方法count=0whilecount<10:count+=1#count=count+1ifcount==7:print(‘‘)else:print(count)#第二种count=0whilecount<10:count+=1#count=count+1ifcount==7:continueprint(count)2. 查看详情

springboot学习:第二天(代码片段)

三、日志1、日志框架小张;开发一个大型系统;  1、System.out.println("");前期将关键数据打印在控制台;去掉?写在一个文件?  2、后来框架来记录系统的一些运行时信息;日志框架;zhanglogging.jar;  3、再后来加高大上... 查看详情

初识python第二天(代码片段)

在Python中,一切事物都是对象,对象是基于类创建的,对象继承了类的属性,方法等。一.传递参数1.1新建python文件,名为twoday_args.py,输出以下代码1importsys2print(sys.argv)34#传入sys模块ViewCode通过pythontwoday_args.py,屏幕打印输出[‘tw... 查看详情

r语言第二天(代码片段)

查看和更改R语言工作空间getwd()显示当前工作空间setwd()更改当前工作空间 列出当前工作空间的对象ls()rm()移除(删除)一个或多个对象>ls()[1]"b""c""course""d""dat1""depart""dim1"[8]"dim2""dim3""en""grade""i""id""math"[15]"mylist""name""sc""Score""s... 查看详情

认识css的第二天(代码片段)

ul去除自带的样式     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>ullist-style-type:none;padding-left:0;</style></he 查看详情

莫烦theano学习自修第二天激励函数(代码片段)

1.代码如下:#!/usr/bin/envpython#!_*_coding:UTF-8_*_importnumpyasnpimporttheano.tensorasTimporttheanox=T.dmatrix(‘x‘)#定义一个激励函数s=1/(1+T.exp(-x))logistic=theano.function([x],s)printlogistic([[0,1],[-2,-3]])# 查看详情

python学习第二天(下)(代码片段)

继续上次的笔记 ####判断一个元素是否在列表中9innameprint(9inname)会返回一个True或False的结果 if9inname:#判断一个元素是否在列表中print("9isinname")####判断一个元素出现的次数count()方法 name=["Alex","Jack","Rain",9,4,3,5,634,34,89,"Eri... 查看详情

暑假第二天之每天一些题系列(代码片段)

暑假第二天之每天一些题系列文章目录暑假第二天之每天一些题系列一、选择题二、填空题三、算法题一、选择题表达式0x13&0x17,0x13|0x17的值分别是多少A.0x170x13B.0x130x17C.0xF80xE8D.0xec0xC8答案解析:0x13的二进制为:000100110x... 查看详情

python学习第二天(上)(代码片段)

##课前思想###GENTLEMENCODE1* 着装得体* 每天洗澡* 适当用香水* 女士优先* 不随地吐痰、不乱扔垃圾、不在人群众抽烟* 不大声喧哗* 不插队、碰到别人要说抱歉* 不在地铁上吃东西* 尊重别人的职业... 查看详情

vue学习第二天------临时笔记(代码片段)

学习链接:vue.js官方文档:  https://cn.vuejs.org/v2/guide/index.htmlvue.jsAPI:  https://cn.vuejs.org/v2/api/#选项-数据基础案例学习:  https://www.mingtern.com/lesson/861068/ 1.使用JavaScript表达式进行运算时,只能使用单个表达式或者链式调... 查看详情