zoukankan      html  css  js  c++  java
  • JqGrid与struts2第一个实例

    JqGrid与struts2第一个实例

    3. 第一个实例 3.1 服务器端 用于提供数据的Action。为了可以复用这种专门接受jqGrid传来参数的Action,我抽象出一个基本类。具体代码如下:
    view plaincopy to clipboardprint?
    package cn.gengv.struts2ex.jqGrid;   
    import java.util.Collections;  
    import java.util.List;  
    import com.opensymphony.xwork2.ActionSupport;   
    @SuppressWarnings("serial")  
    public abstract class JqGridBaseAction<T> extends ActionSupport {  
        // 和jqGrid组件相关的参数属性  
        private List<T> gridModel = Collections.emptyList();  
        private Integer rows = 0;  
        private Integer page = 0;  
        private Integer total = 0;  
        private Integer record = 0;  
        private String sord;  
        private String sidx;  
        private String search;   
         public abstract int getResultSize();   
         public abstract List<T> listResults(int from, int length);   
         public String refreshGridModel() {  
            try {  
                List<T> results = Collections.emptyList();  
                record = this.getResultSize();  
                int from = rows * (page - 1);  
                int length = rows;  
                results = this.listResults(from, length);  
                this.setGridModel(results);  
                total = (int) Math.ceil((double) record / (double) rows);  
                return SUCCESS;  
            } catch (Exception e) {  
                e.printStackTrace();  
                this.addActionError(e.getMessage());  
                return ERROR;  
            }  
        }   
        public List<T> getGridModel() {  
            return gridModel;  
        }  
        public void setGridModel(List<T> gridModel) {  
            this.gridModel = gridModel;  
        }  
        public Integer getRows() {  
            return rows;  
        }  
        public void setRows(Integer rows) {  
            this.rows = rows;  
        }  
        public Integer getPage() {  
            return page;  
        }  
        public void setPage(Integer page) {  
            this.page = page;  
        }  
        public Integer getTotal() {  
            return total;  
        }  
        public void setTotal(Integer total) {  
            this.total = total;  
        }  
        public Integer getRecord() {  
            return record;  
        }  
        public void setRecord(Integer record) {  
            this.record = record;  
        }  
        public String getSord() {  
            return sord;  
        }  
        public void setSord(String sord) {  
            this.sord = sord;  
        }  
        public String getSidx() {  
            return sidx;  
        }  
        public void setSidx(String sidx) {  
            this.sidx = sidx;  
        }  
        public String getSearch() {  
            return search;  
        }  
        public void setSearch(String search) {  
            this.search = search;  
        }  
    }
    package cn.gengv.struts2ex.jqGrid;
    import java.util.Collections;
    import java.util.List;
    import com.opensymphony.xwork2.ActionSupport;
    @SuppressWarnings("serial")
    public abstract class JqGridBaseAction<T> extends ActionSupport {
    // 和jqGrid组件相关的参数属性
    private List<T> gridModel = Collections.emptyList();
    private Integer rows = 0;
    private Integer page = 0;
    private Integer total = 0;
    private Integer record = 0;
    private String sord;
    private String sidx;
    private String search;
    public abstract int getResultSize();
    public abstract List<T> listResults(int from, int length);
    public String refreshGridModel() {
       try {
        List<T> results = Collections.emptyList();
        record = this.getResultSize();
        int from = rows * (page - 1);
        int length = rows;
        results = this.listResults(from, length);
        this.setGridModel(results);
        total = (int) Math.ceil((double) record / (double) rows);
        return SUCCESS;
       } catch (Exception e) {
        e.printStackTrace();
        this.addActionError(e.getMessage());
        return ERROR;
       }
    }
    public List<T> getGridModel() {
       return gridModel;
    }
    public void setGridModel(List<T> gridModel) {
       this.gridModel = gridModel;
    }
    public Integer getRows() {
       return rows;
    }
    public void setRows(Integer rows) {
       this.rows = rows;
    }
    public Integer getPage() {
       return page;
    }
    public void setPage(Integer page) {
       this.page = page;
    }
    public Integer getTotal() {
       return total;
    }
    public void setTotal(Integer total) {
       this.total = total;
    }
    public Integer getRecord() {
       return record;
    }
    public void setRecord(Integer record) {
       this.record = record;
    }
    public String getSord() {
       return sord;
    }
    public void setSord(String sord) {
       this.sord = sord;
    }
    public String getSidx() {
       return sidx;
    }
    public void setSidx(String sidx) {
       this.sidx = sidx;
    }
    public String getSearch() {
       return search;
    }
    public void setSearch(String search) {
       this.search = search;
    }
    }
    说明:其中的成员变量对应着jqGrid的prmNames和jsonReader中的设置。
    成员变量 对应 prmNames 对应 jsonReader 注释
    rows rows - 每页中现实的记录行数
    search search - 是否是用于查询的请求
    sidx sort - 用于排序的列名
    sord order - 排序的方式
    page page page 当前页码
    gridModel - root 用于得到实际数据的数组名称
    total - total 总页数
    record - records 总记录数
    refreshGridModel()方法中,主要工作就是为gridModel、record、total赋值,这些值也将会传回客户端。
    具体的一个实现类:
    view plaincopy to clipboardprint?
    package cn.gengv.struts2ex.jqGrid;  
    import java.util.Collections;  
    import java.util.List;  
    @SuppressWarnings("serial")  
    public class ListContactsAction extends JqGridBaseAction<Contact> {   
            private ContactService contactService;   
            @Override
        public String execute() {  
            return this.refreshGridModel();  
        }     
        @Override
        public int getResultSize() {  
            return this.contactService.queryResultsCount();  
        }      
        @Override
        public List<Contact> listResults(int from, int length) {  
            List<Contact> results = Collections.emptyList();             
            results = this.contactService.queryByPage(from, length);              
            return results;  
        }  
        public void setContactService(ContactService contactService) {  
            this.contactService = contactService;  
        }         
    }
    package cn.gengv.struts2ex.jqGrid;
    import java.util.Collections;
    import java.util.List;
    @SuppressWarnings("serial")
    public class ListContactsAction extends JqGridBaseAction<Contact> {
    private ContactService contactService;
    @Override
    public String execute() {
       return this.refreshGridModel();
    }
    @Override
    public int getResultSize() {
       return this.contactService.queryResultsCount();
    }
    @Override
    public List<Contact> listResults(int from, int length) {
       List<Contact> results = Collections.emptyList();
       results = this.contactService.queryByPage(from, length);
       return results;
    }
    public void setContactService(ContactService contactService) {
       this.contactService = contactService;
    }
    }
    而在struts.xml中,应按如下设置配置action:view plaincopy to clipboardprint?
    <action name="jqGrid01" class="cn.gengv.struts2ex.jqGrid.ListContactsAction">
        <result name="success" type="json">
            <param name="includeProperties">
                ^gridModel\[\d+\]\.\w+,  
                rows, page, total, record  
            </param>
            <param name="noCache">true</param>
            <param name="ignoreHierarchy">false</param>
        </result>
    </action>
    <action name="jqGrid01" class="cn.gengv.struts2ex.jqGrid.ListContactsAction">
    <result name="success" type="json">
       <param name="includeProperties">
        ^gridModel\[\d+\]\.\w+,
        rows, page, total, record
       </param>
       <param name="noCache">true</param>
       <param name="ignoreHierarchy">false</param>
    </result>
    </action>
    3.2 客户端(浏览器) javascript部分: view plaincopy to clipboardprint?
    $(function(){  
        // 配置jqGrid组件  
        $("#gridTable").jqGrid({  
            url: "jqGrid01.action",  
            datatype: "json",  
            mtype: "GET",  
            height: 350,  
            auto true,  
            colModel: [  
                  {name:"id",index:"id",label:"ID",40},    
                  {name:"lastName",index:"lastName",label:"Last Name",80,sortable:false},  
                  {name:"firstName",index:"firstName",label:"First Name",80,sortable:false},  
                  {name:"email",index:"email",label:"E-mail",160,sortable:false},  
                  {name:"telNo",index:"telNo",label:"Tel No",120,sortable:false}  
            ],  
            viewrecords: true,  
            rowNum: 15,  
            rowList: [15,50,100],  
            prmNames: {search: "search"},   //(1)  
            jsonReader: {  
                root:"gridModel",       // (2)  
                records: "record",      // (3)  
                repeatitems : false     // (4)  
            },  
            pager: "#gridPager",  
            caption: "联系人列表",  
            hidegrid: false
        });  
    });
    $(function(){
    // 配置jqGrid组件
    $("#gridTable").jqGrid({
       url: "jqGrid01.action",
       datatype: "json",
       mtype: "GET",
       height: 350,
       auto true,
       colModel: [
               {name:"id",index:"id",label:"ID",40},
            {name:"lastName",index:"lastName",label:"Last Name",80,sortable:false},
            {name:"firstName",index:"firstName",label:"First Name",80,sortable:false},
            {name:"email",index:"email",label:"E-mail",160,sortable:false},
            {name:"telNo",index:"telNo",label:"Tel No",120,sortable:false}
       ],
       viewrecords: true,
       rowNum: 15,
       rowList: [15,50,100],
       prmNames: {search: "search"}, //(1)
       jsonReader: {
        root:"gridModel",   // (2)
        records: "record",   // (3)
        repeatitems : false   // (4)
       },
       pager: "#gridPager",
       caption: "联系人列表",
       hidegrid: false
    });
    });
    其中主要的选项在开头已经介绍过了,另外需要说明以下几点:
    1、在位置(1)处,为了配合Server端的Action类中的成员变量命名,将prmNames中search对应的“_search”更改为“search”。
    2、在位置(2)(3)处,为了配合Server端的Action类中的成员变量命名,将jsonReader中root对应的“rows”更改为“gridModel”,将records对应的“records”更改为“record”。
    在后面的request和response解析中,就可以看到这些更改的作用。
    html部分: 要想顺利的使用jqGrid,需要想页面中引入6个文件,其中4个js文件,2个css文件。它们分别是:jquery-ui-1.8.1.custom.css(jQuery UI界面的CSS文件)
    ui.jqgrid.custom.css(专用于jqGrid界面的CSS文件)
    jquery-1.4.2.min.js(jQuery的核心)
    jquery-ui-1.8.1.custom.min.js(用于支持jQuery UI界面)
    grid.locale-zh-CN.js(针对jqGrid的locale设置,根据locale不同,选择不同的尾缀)
    jquery.jqGrid.min.js(jqGrid的核心,可以到jqGrid网站,根据需求选择模块下载)
    注 :jqGrid的官方包中原本针对中文的locale js文件是grid.locale-cn.js,但是里面的某些设置,并没有做到完全中文化,因此我从Struts2-jQuery插件中分离出grid.locale-zh-CN.js和jquery.ui.datepicker-zh-CN.min.js这两个文件以备后用。说起来这两个文件中,针对中文的设置还是不错的。 引入这6个文件后,创建jqGrid的工作就交给上面写的javascript代码来完成了。view plaincopy to clipboardprint?
    <!DOCTYPE html  
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  
    "
    http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="
    http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
        <head>
            <title>jqGrid01</title>
            <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/jquery-ui-1.8.1.custom.css" mce_href="css/themes/aero/jquery-ui-1.8.1.custom.css" />
            <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/ui.jqgrid.custom.css" mce_href="css/themes/aero/ui.jqgrid.custom.css" />
              
            <mce:script type="text/javascript" src="../js/jquery-1.4.2.min.js" mce_src="js/jquery-1.4.2.min.js"></mce:script>
            <mce:script src="../js/jquery-ui-1.8.1.custom.min.js" mce_src="js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></mce:script>
            <mce:script src="../js/i18n/grid.locale-zh-CN.js" mce_src="js/i18n/grid.locale-zh-CN.js" type="text/javascript"></mce:script>
            <mce:script src="../js/jquery.jqGrid.min.js" mce_src="js/jquery.jqGrid.min.js" type="text/javascript"></mce:script>
              
            <mce:script src="js/jqGrid01.js" mce_src="js/jqGrid01.js" type="text/javascript"></mce:script>    
        </head>
        <body>
            <h2>
                jqGrid测试 01  
            </h2>
            <div>
                <table id="gridTable"></table>
                <div id="gridPager"></div>
            </div>
        </body>
    </html>
    <!DOCTYPE html
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "
    http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="
    http://www.w3.org/1999/xhtml" xml:lang="zh-CN" lang="zh-CN">
    <head>
       <title>jqGrid01</title>
       <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/jquery-ui-1.8.1.custom.css" mce_href="css/themes/aero/jquery-ui-1.8.1.custom.css" />
       <link rel="stylesheet" type="text/css" media="screen" href="../css/themes/aero/ui.jqgrid.custom.css" mce_href="css/themes/aero/ui.jqgrid.custom.css" />
      
       <mce:script type="text/javascript" src="../js/jquery-1.4.2.min.js" mce_src="js/jquery-1.4.2.min.js"></mce:script>
       <mce:script src="../js/jquery-ui-1.8.1.custom.min.js" mce_src="js/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></mce:script>
       <mce:script src="../js/i18n/grid.locale-zh-CN.js" mce_src="js/i18n/grid.locale-zh-CN.js" type="text/javascript"></mce:script>
       <mce:script src="../js/jquery.jqGrid.min.js" mce_src="js/jquery.jqGrid.min.js" type="text/javascript"></mce:script>
      
       <mce:script src="js/jqGrid01.js" mce_src="js/jqGrid01.js" type="text/javascript"></mce:script>
    </head>
    <body>
       <h2>
        jqGrid测试 01
       </h2>
       <div>
        <table id="gridTable"></table>
        <div id="gridPager"></div>
       </div>
    </body>
    </html>

    HTML中的代码,异常简洁。

    每一天都要行动,在前进中寻求卓越。
  • 相关阅读:
    Django之web本质
    Python之队列
    Python之阻塞IO模型与非阻塞IO模型
    *****Python之进程线程*****
    ***Python之UDP***
    Python之FTP实现
    Python之粘包
    Python之目录结构
    Python之套接字
    Linux内核分析:Linux内核启动流程分析
  • 原文地址:https://www.cnblogs.com/wshsdlau/p/2865536.html
Copyright © 2011-2022 走看看