DEMO用的是ssh框架实现的,具体怎么搭建的就不多做说明了。分页表格的数据操作难点就是数据展现。至于增删改直接用hibernate原生的方法实现即可。
初步分析:表格要实现分页,那么一页显示多少条数(PageSize)和当前页码(CurrentPage)这两个条件必不可少。为了实现点击任何一列的表头进行排序,那么排序的列名(Sidx)和排序规则(Sort)必不可少。有了这四个参数实现基本的数据展现应该不成问题了。但是如果数据量比较多的时候,为了方便查询。还得需要一个Map参数,用来保存页面的请求参数。比如根据编号查询,根据名称查询等。
废话不多说,先看Dao接口定义。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/** * @param pageSize * 每页显示多少条 * @param currentPage * 当前页 * @param paramMap * 参数 * @param sidx * 排序的列 * @param sord * 升序or降序 * @return */ public Map<?, ?> queryByJQGrid( int pageSize, int currentPage, Map<String, String> paramMap, String sidx, String sord);
|
接着我们来实现这个接口。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
@Override public Map<?, ?> queryByJQGrid( int pageSize, int currentPage, Map<String, String> paramMap, String sidx, String sord) {
Map result = new HashMap();
List list = null ;
try {
Criteria cr = DetachedCriteria.forClass(Student. class ).getExecutableCriteria( this .getSession());
if ((paramMap != null ) && (paramMap.size() > 0 )) {
String key = null ;
String value = null ;
Iterator ite = paramMap.keySet().iterator(); while (ite.hasNext()) {
key = (String) ite.next(); value = (String) paramMap.get(key); if ((key != null ) && (key.trim().length() > 0 ) && (value != null ) && (value.trim().length() > 0 )) {
cr.add(Restrictions.like(key, "%" + value.trim() + "%" ));
} } } Integer totcount = (Integer) cr.setProjection(Projections.rowCount()).uniqueResult(); cr.setProjection( null ).setResultTransformer(Criteria.ROOT_ENTITY);
if (!StringUtils.isEmpty(sidx)) {
list = cr.addOrder(((sord != null ) && (sord.trim().equalsIgnoreCase( "asc" ))) ? Order.asc(sidx.split( " " )[ 0 ]) :
Order.desc(sidx.split( " " )[ 0 ])).setFirstResult((currentPage - 1 ) * pageSize).setMaxResults(pageSize).list();
} result.put( "totalCount" , totcount);
result.put( "dataList" , list);
} catch (Exception e) {
e.printStackTrace(); } return result;
} |
Service层不需要做什么处理,就不多做说明了。接下来看Action如何实现。为了配合Jqgrid的JsonReader选项的参数,我们可以把JsonReader里面的参数用JavaBean保存起来,再用Action去继承JavaBean,省略get和set方法。
1
2
3
4
5
6
7
8
|
protected List dataList = Collections.emptyList(); //数据集合
protected Integer rows = Integer.valueOf( 0 ); //行数
protected Integer page = Integer.valueOf( 0 ); //当前页数
protected Integer total = Integer.valueOf( 0 ); //数据总页数
protected Integer record = Integer.valueOf( 0 ); //数据总条数
protected String sord; //排序方式
protected String sidx; //排序字段
protected String search;
|
编写Action继承刚才的JavaBean,调用Dao层的方法即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public String query() {
Map<String, String> paramMap = new HashMap<String, String>();
Map map = null ;
if ( null != stuName && stuName.trim().length() > 0 ) {
paramMap.put( "name" , stuName);
} map = queryAllStudentService.queryByJQGrid(rows, page, paramMap, sidx, sord); this .dataList = (ArrayList) map.get( "dataList" );
Object totalCount = map.get( "totalCount" );
this .record = Integer.valueOf(Integer.parseInt((totalCount == null ) ? "0" : totalCount.toString()));
this .total = Integer.valueOf(( int ) Math.ceil( this .record.intValue() / this .rows.intValue()));
return "query_success" ;
} |
关键代码的实现已经差不多了,接下来就要注意返回的数据格式了。因为我们需要的是JSON格式的数据。第一种:可以直接通过JSONObject把集合序列化成json格式的数据返回,第二种:可以在Struts.xml里面继承json-default,然后通过配置返回数据。推荐使用第二种,因为第一种会把所有的字段都序列化过来,对性能会有一定影响。Struts.xml配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
< package name = "student" extends = "json-default" >
< action name = "QueryActionUrl_*" method = "{1}" >
< result name = "query_success" type = "json" >
< param name = "includeProperties" >
dataList\[\d+\]\.id, dataList\[\d+\]\.name, dataList\[\d+\]\.age, dataList\[\d+\]\.address, dataList\[\d+\]\.class, dataList\[\d+\]\.likedo, dataList\[\d+\]\.phone, dataList\[\d+\]\.sex, rows, page, total,record</ param >
< param name = "noCache" >true</ param >
< param name = "ignoreHierarchy" >false</ param >
< param name = "contentType" >text/html</ param >
</ result >
</ action >
</ package >
|
注意:在Struts2中使用json还需要json-plagin.jar的支持。不然会抛There is no mapping for namespace异常。如果还有什么不明白的地方,留下你的评论。
相关推荐
jqgrid+struts2+jdbc实现的增删改查
jqgrid+struts2+ibatis+oracle增删改查
C# MVC4框架 引用了JQGRID(SUBGRID) 和 JSTREE 做的DEMO 仅供参考 包含数据库文件
jqgrid+struts结合简单显示示例
jQgrid+demo
Jqgrid demo-史上最强大,没有之一, 为了大家能够更好的学习和使用Jqgrid网格插件,我决定用Strtus2+Spring+hibernate+Jquery+Jqgrid实现一个Jqgrid网格插件的demo。当然官方网站上面已经有了PHP版本和ASP.NET版本...
本例程,主要是,用jqgrid 实现grid及subgrid数据列表的分页,增,删,改,查,定制显示列的功能 用jqueryUI 实现 上下左的布局 数据库及源码都在上传的RAR包中 由于上传空间的问题,JAR包不做上传,大家可以自己...
jqgrid方法-中文 (2).docxjqgrid方法-中文 (2).docx
自己搜集的jqGrid与Struts2的结合应用的方法
struts配置文件和hibernate的配置文件都在src目录下 4.这就是jqGrid最简单的演示,没有加入任何其它功能, Good Luck! 有人问到没有spring,由于主要是演示jqGrid和jQuery的AJAX功能,所以没有加上spring框架, 如有...
jquery.jqGrid-4.3.1+jquery-ui-1.8.17.rar
jqgrid与struts2结合的例子
jquery.jqGrid-4.4.3,用于web页面的列表分页显示
关于jqGrid 前端框架与后台交互及主从表实现的完整实例 如无下载币可访问本人博客 复制源码 http://blog.csdn.net/dfs4df5/article/details/51187065
jqGrid是一个非常好用的免费开源Grid组件,功能强大,适用于各种表格操作,数据管理。作为jquery插件,jqGrid使用方便,简介,美观。
jquery.jqGrid-3.8.2.zipjquery.jqGrid-3.8.2.zipjquery.jqGrid-3.8.2.zipjquery.jqGrid-3.8.2.zipjquery.jqGrid-3.8.2.zipjquery.jqGrid-3.8.2.zip
jquery.jqGrid-4.3.0+jquery-ui-1.8.16.custom所有完整包
jquery.jqGrid-4.8.2(jquery表格插件).zip----------jqGrid4.8.2包,官网下载的,原封不动的在这里。 jqgrid_demo40-----可用的-使用方法请查看README文件. jqgrid_3.6.5_API_en.chm------附加放在这里的其它资料...
jquery.jqGrid-4.5.2.zip 官方资源文件
JqGrid插件+JqGridDemo+JqGrid主题,自己项目里引入的文件