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:響應結果的類型