• 分页进阶--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);

      效果图:

      

  • 相关阅读:
    POJ-1465 Multiple
    POJ-2585 Window Pains
    POJ-1094 Sorting It All Out
    Linux基础学习笔记1
    建议3---理解Python与C语言的不同之处
    堆排序的Python实现
    迭代器和生成器详解
    建议2---编写pythonic代码
    python中Switch/Case实现
    建议1---理解Pythonic的概念
  • 原文地址:https://www.cnblogs.com/chentingk/p/5846048.html
Copyright © 2020-2023  润新知