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,  
        autowidth: true,  
        colModel: [  
              {name:"id",index:"id",label:"ID",width:40},    
              {name:"lastName",index:"lastName",label:"Last Name",width:80,sortable:false},  
              {name:"firstName",index:"firstName",label:"First Name",width:80,sortable:false},  
              {name:"email",index:"email",label:"E-mail",width:160,sortable:false},  
              {name:"telNo",index:"telNo",label:"Tel No",width: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,
   autowidth: true,
   colModel: [
           {name:"id",index:"id",label:"ID",width:40},
        {name:"lastName",index:"lastName",label:"Last Name",width:80,sortable:false},
        {name:"firstName",index:"firstName",label:"First Name",width:80,sortable:false},
        {name:"email",index:"email",label:"E-mail",width:160,sortable:false},
        {name:"telNo",index:"telNo",label:"Tel No",width: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中的代码,异常简洁。

转载于:https://www.cnblogs.com/wshsdlau/archive/2013/01/17/2865536.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值