分页进阶--ajax+jquery+struts2

  按照上次的分页逻辑,分页查询的业务大概需要几个“零件”:1.当前页;2.总页数;3.跳转页。后端需要处理的是:按照传送过来请求的页码返回相应地数据,并且接受初始化参数的请求:总页码、第一页的数据。

  使用ajax请求可以很轻易地和服务器交互,所需要的数据格式是json。json的好处是可以把大量的数据格式化成一条字符串,由前后端的程序进行解析并呈现内容。我把查询到的数据装入list,并用struts自带的工具转换成为json返回客户端。

  前端程序如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/pager.js"></script>
</head>
<body>

    <div >
        <table id="content" border="1">

        </table>
    </div>
    <div id="guide">
        <!-- 只输入数字的输入框 -->
        <button id="prePage" type="button">上一页</button> 当前 第 <span id="current"></span> 页/共 <span id="total"></span> 页  跳转到<input id="jumpPage" size="5" type="text" onkeyup='this.value=this.value.replace(/D/gi,"")'/> <button id="jumpBtn">跳转到</button>  <button id="nextPage" type="button">下一页</button>
    </div>
</body>
</html>
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
var totalPage;
var currentPage;
var userlist;
//初始化请求--将当前页和总页面初始化 和 list
$(document).ready(function(){
    
    $.get('Init','',function(results){
        $.each(results, function(key, val) {     
             if(key === "current")
                 currentPage = results[key];
             else if(key === "total")
                 totalPage = results[key];
             else if(key == "list"){
                userlist=val;
             }
        });
        currentPage = parseInt(currentPage);
        totalPage = parseInt(totalPage);
        $("#current").text(currentPage);
        $("#total").text(totalPage);
        getUser(userlist);
       
        //console.log(currentPage);
        //console.log(totalPage);
    });
});

//上一页
$(document).ready(function(){
    $('#prePage').click(function(){
        if(currentPage == 1)
            alert("已至首页");
        else{
            currentPage = currentPage-1;
            var need=currentPage;
        
            $.get('Pager','need='+need,function(result){
                userlist = result['userList'];
                getUser(userlist);
                $('#current').text(need);
            });
            }
    });
});
//下一页
$(document).ready(function(){
    $('#nextPage').click(function(){
        if(currentPage == totalPage)
            alert("已至尾页");
        else{
            currentPage = currentPage+1;
            var need=currentPage;
        
            $.get('Pager','need='+need,function(result){
                userlist = result['userList'];
                getUser(userlist);
                //console.log(need);
                $('#current').text(need);
            });
        }
    });
    
});
//跳转页
$(document).ready(function(){
    $('#jumpBtn').click(function(){
        var toPage = $('#jumpPage').val();
        if(toPage != ""){
            toPage = parseInt(toPage);
            if(toPage <= totalPage && toPage >=1)
                $.get('Pager','need='+toPage,function(result){
                    userlist = result['userList'];
                    getUser(userlist);
                    //console.log(need);
                    $('#current').text(toPage);
                });
            else {
                alert("跳转页不合法!");
            }
        }
    });
});
//遍历list并生成table
function getUser(list){
    //先清空再添加
    var table = $('#content');
    table.html("");
    var thead = $("<tr></tr>");
    thead.appendTo(table);
    var tagName = $("<td>id</td>");
    tagName.appendTo(thead);
    tagName = $("<td>name</td>");
    tagName.appendTo(thead);
    tagName = $("<td>sex</td>");
    tagName.appendTo(thead);
    tagName = $("<td>age</td>");
    tagName.appendTo(thead);
    
    for(var k in list){
        var tr=$("<tr></tr>");
        tr.appendTo(table);
        var person = new Object();
        var td;
        
        person.id=userlist[k]['id'];
        person.name=userlist[k]['name'];
        person.sex=userlist[k]['sex'];
        person.age=userlist[k]['age'];
            
        td=$("<td>"+person.id+"</td>");
        td.appendTo(tr);
        td=$("<td>"+person.name+"</td>");
        td.appendTo(tr);
        td=$("<td>"+person.sex+"</td>");
        td.appendTo(tr);
        td=$("<td>"+person.age+"</td>");
        td.appendTo(tr);
        //console.log(person);
    }
}

  后端逻辑为:

package ActionPackage;

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

import model.test_u;
import pagetest.PageService;


public class PageAction extends ActionSupport{
    private HashMap<String,Object> dataMap;
    private List<test_u> userList;
    public List<test_u> getUserList() {
        return userList;
    }
    public void setUserList(List<test_u> userList) {
        this.userList = userList;
    }
    private int size=10;
    public String Pager(){
        HttpServletRequest request = ServletActionContext.getRequest();
        int need = Integer.parseInt(request.getParameter("need"));
        System.out.println("need = "+need);
        PageService ps = new PageService();
        userList = ps.selectLimit((need-1)*size, size);
        return SUCCESS;
    }
    public String Init(){
        System.out.println("访问了!");
        PageService ps = new PageService();
        int total = ps.getConut()/10;
//        HttpServletResponse response = ServletActionContext.getResponse();
        dataMap = new HashMap<String,Object>();
        dataMap.put("current", 1);
        dataMap.put("total", total);
        List list = ps.selectLimit(1, size);
        dataMap.put("list", list);
//        String jsonString="{"current":1,"totle":12}"; 
//        try {
//            response.getWriter().print(jsonString);
//        } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
        return SUCCESS;
    }
    
    public HashMap<String, Object> getDataMap() {
        return dataMap;
    }
    public void setDataMap(HashMap<String, Object> dataMap) {
        this.dataMap = dataMap;
    }
}

  模型层与DAO层与service层如上篇分页一样。

        <action name="Pager" class="ActionPackage.PageAction" method="Pager">
                <result type="json">  
                <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->  
                <param name="root1">userList</param>  
            </result> 
        </action>
        <action name="Init" class="ActionPackage.PageAction" method="Init">
             <result type="json">  
                <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->  
                <param name="root">dataMap</param>  
            </result>  
        </action>

  主要难题:json对象的解析。因为前端代码不是很熟悉,查了很多资料,传回来的数据是Object Object类型的,其实用for循环加上k,v访问就ok了。最后记录动态表格生成的代码。

    var table = $('#content');
    table.html("");
    var thead = $("<tr></tr>");
    thead.appendTo(table);
    var tagName = $("<td>id</td>");
    tagName.appendTo(thead);
    tagName = $("<td>name</td>");
    tagName.appendTo(thead);
    tagName = $("<td>sex</td>");
    tagName.appendTo(thead);
    tagName = $("<td>age</td>");
    tagName.appendTo(thead);

  效果图:

  

原文地址:https://www.cnblogs.com/chentingk/p/5846048.html