zoukankan      html  css  js  c++  java
  • 分页进阶--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);

      效果图:

      

  • 相关阅读:
    “XXXXX” is damaged and can’t be opened. You should move it to the Trash 解决方案
    深入浅出 eBPF 安全项目 Tracee
    Unity3d开发的知名大型游戏案例
    Unity 3D 拥有强大的编辑界面
    Unity 3D物理引擎详解
    Unity 3D图形用户界面及常用控件
    Unity 3D的视图与相应的基础操作方法
    Unity Technologies 公司开发的三维游戏制作引擎——Unity 3D
    重学计算机
    windows cmd用户操作,添加,设备管理员组,允许修改密码
  • 原文地址:https://www.cnblogs.com/chentingk/p/5846048.html
Copyright © 2011-2022 走看看