之前谈到了jqGrid与Serlvet/JSP集成,实际上就是Servlet按jqGrid对数据的要求返回相应的数据,Servlet中是通过PrintWriter输出数据的,那时,我们用到了json-lib来构建Json数据。现在来谈谈jqGrid如何与Struts2集成。
对于Struts2,同样需要按jqGrid的要求返回相应的json数据格式。当然,我们可以在Struts2的Action中通过返回 null来干Servlet一样的事情,这样也能够同Servlet一样实现与jqGrid集成。然而,此时Struts2实际上相当于没有。既然用到了 Struts2,我们就应该用Struts2为我们提供的方法。而且,在Struts的Action中应该尽量避免使用request 之类的 Servlet对象,用Struts2更是如此。在struts1.x中,request直接就有的,因而在开发中总会有人“打着struts的旗帜,干着Servlet的勾当”。我们知道,request等是依赖于Servlet容器的,Struts2把这些屏蔽了,Struts2的Action可以直接是POJO,因而我们更不应该违反Struts2的设计原则,硬是去“干Servlet的勾当”。闲话不说,开始咱们的正题。
在Struts2的jar包中,有一个struts2-json-plugin.jar,它就是用于处理json数据的(Struts2提供了很多插件),我们就是应用它来实现struts2与jqGrid的集成。
1、效果图:
2、代码与解释:
HTML代码:
<;
body
>;
<;
table
id
=";gridTable";
>;
<;/ table >;
<;
div
id
=";gridPager";
>;
<;/ div >;
<;/ body >;
JavaScript代码:
$(
function ()
{
$(
";#gridTable"; ).jqGrid({
url:'json/jqgrid.action',
datatype:
";json"; ,
height: 250,
colNames:['编号','用户名', '性别', '邮箱', 'QQ','手机号','出生日期'],
colModel:[
{name:'id',index:'id', sorttype:
";int"; },
{name:'userName',index:'userName',
{name:'gender',index:'gender',
{name:'email',index:'email', ;string";},
{name:'QQ',index:'QQ', ;
{name:'mobilePhone',index:'mobilePhone', ;
{name:'birthday',index:'birthday', sorttype:
";date"; }
],
sortname:'id',
sortorder:'asc',
viewrecords:
true ,
rowNum:10,
rowList:[10,20,30],
jsonReader: {
root:
";dataRows"; ,
// 数据行(默认为:rows)
page:
";curPage"; ,
// 当前页
total:
";totalPages"; ,
// 总页数
records:
";totalRecords"; ,
// 总记录数
repeatitems :
false
// 设置成false,在后台设置值的时候,可以乱序。且并非每个值都得设
},
prmNames:{rows:
";page.pageSize"; ,page:
";page.curPageNo"; ,sort:
";derBy"; ,order:
";der"; },
pager:
";#gridPager"; ,
caption:
";jqGrid与Struts2集成";
}).navGrid('#gridPager',{edit:
false ,add:
false ,del:
false });
})
注意,JavaScript代码与Servlet例子中的有点不一样,主要是:jsonReader参数,另外增加了prmNames参数。每一项的是什么意思下面Java代码的注释中有详细说明。
Java代码:
package com.polaris.jqgrid.struts2;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.opensymphony.xwork2.ActionSupport;
import com.polaris.jqgrid.util.Page;
/**
* <;p>;
* 该类是所有需要返回json数据的Action的<;b>;抽象基类<;/b>;。在展示数据时,使用了jQuery的插件jqGrid,
* 它对返回的json数据格式有一定的要求。该基类就处理了这些统一的格式要求。
* 需要返回json格式数据被jqGrid使用的,应该继承该类。<;br/>;
* <;b>;<;font color='red'>;注意:所有子类应该实现以下get方法,并只简单的返回相应的属性值。<;/font>;<;/b>;jquery在项目里是干啥的
* <;ul>;
*        <;li>;{@link JsoBaseAction#getTotalPages()}<;/li>;
*        <;li>;{@link JsoBaseAction#getCurPage()}<;/li>;
*        <;li>;{@link JsoBaseAction#getTotalRecords()}<;/li>;
*        <;li>;{@link JsoBaseAction#getDataRows()}<;/li>;
* <;/ul>;
* 之所以将这些get方法定义为抽象的,是因为struts2的json插件只会序列化Action 类,而不会序列化其父类。
* <;/p>;
*
* <;p>;<;font color='red'>;
* 继承该类的Action方法,除了搜索(它需要返回JSON数据,因此可以返回SUCCESS),

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。