­

java,jq,ajax写分页

  • 2020 年 3 月 31 日
  • 筆記

1.先写好html基础样式

我懒得去写css样式233,能看就行

    <style>          #page {              width: 20px;          }      </style>  <table>      <tr>          <th>id</th>          <th>name</th>          <th>pwd</th>          <th>age</th>      </tr>      <tbody id="res">        </tbody>  </table>  <button id="up_btn">上一页</button>  <span><input type="text" id="page"><span id="pages"></span></span>  <button id="down_btn">下一页</button>  

2.编写servlet

  • 2.1 先写查询数据库总条数的servlet LoadServlet

        //WorkerDaoImpl是我自己写的数据库操作类          WorkDaoImpl workDao=new WorkDaoImpl();          int count =0;          try {              //查询总条数             count = workDao.queueCountWorker();          } catch (Exception e) {              e.printStackTrace();          }          //传输类型为json,编码为utf-8          response.setContentType("application/json;charset=utf-8");          //Java对象转换JSON,导入的是Jackson的包          ObjectMapper mapper=new ObjectMapper();          Map<String,Object> map=new HashMap<>();          map.put("count",count);          mapper.writeValue(response.getWriter(),map);          //将总条数写入ServletContext域,避免多次查询浪费资源          ServletContext sc = this.getServletContext();          sc.setAttribute("count",count);  
  • 2.2 编写查询数据的servlet QueueAllWorkersServlet

       //获取前端传来的页码数          int page = Integer.parseInt(request.getParameter("page"));          //从ServletContext中获取总条数          ServletContext sc = this.getServletContext();          int count = (Integer) sc.getAttribute("count");            List<Worker> workers = null;          WorkDaoImpl workDao = new WorkDaoImpl();          try {              //当页码小于1,显示第一页的数据              if (page<1){                  workers = workDao.queueAllWorker(0, 5);                  //当页码大于最大页数,显示最大页数的数据              }else if (page>Math.ceil(((double)count)/5)){                  workers = workDao.queueAllWorker((int)Math.ceil(((double)count)/5)-1, 5);              }else {                  workers = workDao.queueAllWorker((page - 1) * 5, 5);              }          } catch (Exception e) {              e.printStackTrace();          }          //数据类型为json,字符集为utf-8          response.setContentType("application/json;charset=utf-8");          //数据传出          ObjectMapper mapper = new ObjectMapper();          mapper.writeValue(response.getWriter(), workers);  
  • 2.3 补充:JSON数据和Java对象的相互转换

    • JSON解析器:
    • 常见的解析器:Jsonlib,Gson,fastjson,jackson
    • 1.JSON转为Java对象
        1. 导入jackson的相关jar包    2. 创建Jackson核心对象 ObjectMapper    3. 调用ObjectMapper的相关方法进行转换    	1. readValue(json字符串数据,Class)  
    • 2. Java对象转换JSON
        1. 使用步骤:    	1. 导入jackson的相关jar包    	2. 创建Jackson核心对象 ObjectMapper    	3. 调用ObjectMapper的相关方法进行转换    		1. 转换方法:    			* writeValue(参数1,obj):                    参数1:                        File:将obj对象转换为JSON字符串,并保存到指定的文件中                        Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中                        OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中                * writeValueAsString(obj):将对象转为json字符串      		2. 注解:    			1. @JsonIgnore:排除属性。    			2. @JsonFormat:属性值得格式化    				* @JsonFormat(pattern = "yyyy-MM-dd")      		3. 复杂java对象转换    			1. List:数组    			2. Map:对象格式一致  

3.ajax编写

  • 3.1 源码

        $(function () {              var page = 1;              var pages = 1;              ;              $("#page").val(page);                //查询方法              function ser() {                  $.post("QueryAllWorkers2Servlet", {page: page}, function (data) {                      //拼接字符串最后写入到res中                      var str = "";                      //遍历data数组                      for (var i = 0; i < data.length; i++) {                          //获取data当前的json                          var user = data[i];                          str += "<tr>";                          //遍历json                          for (var key in user) {                              str = str + "<td>" + user[key] + "</td>";                            }                          str = str + "</tr>";                      }                      $("#res").html(str);                  });              }                //刷新后自动获取最大页码              function load() {                  $.post("LoadServlet", null, function (data) {                      pages = Math.ceil(data["count"] / 5);                      $("#pages").text("/" + pages);                  })              }                load();              ser();              //下一页点击事件              $("#down_btn").click(function () {                  page = page + 1;                  //检验                  if (page > pages) {                      page = pages;                  }                  //将page中的值改为修改后的页码                  $("#page").val(page);                  ser();                });              //上一页点击事件              $("#up_btn").click(function () {                  page = page - 1;                  //检验                  if (page < 1) {                      page = 1;                  }                  //修改                  $("#page").val(page);                  ser();                });              //page输入框失去焦点事件              $("#page").blur(function () {                  page = parseInt($("#page").val());                  //校验,若输入的值大于最大页码数,则将页码变为最大页码数                  if (page > pages) {                      page = pages;                      //校验,若输入的值小于1,则将页码变为1                  } else if (page < 1) {                      page = 1;                  }                  $("#page").val(page);                  ser();              });            });  
  • 3.2 补充 ajax参数

      	1. $.ajax()    		* 语法:$.ajax({键值对});    		 //使用$.ajax()发送异步请求                $.ajax({                    url:"ajaxServlet1111" , // 请求路径                    type:"POST" , //请求方式                    //data: "username=jack&age=23",//请求参数                    data:{"username":"jack","age":23},                    success:function (data) {                        alert(data);                    },//响应成功后的回调函数                    error:function () {                        alert("出错啦...")                    },//表示如果请求响应出现错误,会执行的回调函数                      dataType:"text"//设置接受到的响应数据的格式                });    	2. $.get():发送get请求    		* 语法:$.get(url, [data], [callback], [type])    			* 参数:    				* url:请求路径    				* data:请求参数    				* callback:回调函数    				* type:响应结果的类型      	3. $.post():发送post请求    		* 语法:$.post(url, [data], [callback], [type])    			* 参数:    				* url:请求路径    				* data:请求参数    				* callback:回调函数    				* type:响应结果的类型