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异常。如果还有什么不明白的地方,留下你的评论。

原创文章,转载请注明: 转载自java开发者

本文链接地址: Jqgrid入门-结合Struts2+json实现数据展示(五)

Jqgrid入门-结合Struts2+json实现数据展示(五)的更多相关文章

  1. JqGrid 自定义子表格 及 自定义Json 格式数据不展示

    项目第一次使用JqGrid ,发现功能强大,但由于对他不熟悉,也没有少走弯路,记录一下. 1.引用 <link href="~/Scripts/JqGrid/jqgrid/css/ui ...

  2. Jqgrid入门-使用模态对话框编辑表格数据(三)

            Jqgrid是一个强大的表格插件,它提供了多种方式来编辑数据.这三种方式分别是: Cell Editing——只允许修改某一个单元格内容 Inline Editing——允许在jqGr ...

  3. Struts2+Jquery实现ajax并返回json类型数据

    来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...

  4. Jqgrid入门-Jqgrid列数据拖动(七)

    上一章提到在Jqgrid中如何设置二级表头,这一章节主要探讨Jqgrid表格里面的数据如果实现拖动功能,比如你想把第一行的数据拖到当前页的最后一行,或者其他位置.     Jqgrid表格插件自己没有 ...

  5. 转载:Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  6. MVC框架json数据展示程序(第一版)

    模型原型:服务器的配置和运行状态信息. 设计要求:Json格式数据解析后,判断配置信息是否是新数据或者是否更新.如是新数据,则直接添加到数据库:若是数据更新,则更新数据库配置信息并更新运行状态信息:都 ...

  7. Sencha touch 2 入门 -------- DataView 显示服务器端JSON文件数据

    今天学习了下DataView如何显示JSON文件数据,废话不多说,直接贴代码: 首先看下文件目录: 然后看下我们要处理的JSON文件,bookInfo.json. { "success&qu ...

  8. Java入门系列:处理Json格式数据

    本节主要讲解: 1)json格式数据处理方法 2)第三方工具包的使用方法 3)java集合数据类型 [项目任务] 编写一个程序,显示未来的天气信息. [知识点解析] 为了方便后面代码的分析,先需要掌握 ...

  9. Jqgrid入门-Jqgrid设置二级表头(六)

    上一章已经说明了Jqgrid结合Struts2+json展示数据,这一章主要探讨Jqgrid如何设置二级表头,类似这样的效果.如:           要实现这个功能,其实也不难.通过Jqgrid的s ...

随机推荐

  1. android support Percent支持库开发

    Android的布局支持百分比的设置进行开发,来学习如何去实现它,不过看起来会像网页的设置,比如宽度的设置属性是`layout_widthPercent`.在此之前,我们一般都会设置Linearlay ...

  2. 2729:[HNOI2012]排队 - BZOJ

    题目描述 Description某中学有n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人 ...

  3. 利用Multi-Probe LSH构建ANN高维索引

    感谢大神们的无私奉献精神........因此笔者要坚持开源,专注开源,开源就像在HPU的考试中不像其他人作弊一样,长远来看,会有巨大收获. 一.背景介绍 1.1 相似性搜索简介 高维相似性搜索在音频. ...

  4. java socket编程基础(转)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  5. 安装JDK后JRE与JVM联系浅谈

    转自安装JDK后JRE与JVM联系浅谈 安装JDK后JRE.JVM之间的关系是什么呢?那么我们要从安装JDK慢慢说起. 如果安装了JDK,会发同你的电脑有两套JRE: 一套位于 <JDK安装目录 ...

  6. WCF 笔记 (2) - 传输泛型 List 对象

    WCF 笔记 (2) - 传输泛型 List 对象 本帖介绍怎么在 WCF 中,在 Server-side 和 Client-side 之间,传递默认无法传输的 List<T>.List& ...

  7. 2> How Struts 2 Works

    The first thing we should consider is that the workflow of figure 1.4 still obeys the sim- pler MVC ...

  8. 学习笔记--Grunt、安装、图文详解

    学习笔记--Git安装.图文详解 安装Git成功后,现在安装Gruntjs,官网:http://gruntjs.com/ 一.安装node 参考node.js 安装.图文详解 (最新的node会自动安 ...

  9. hdu 4282 A very hard mathematic problem

    由于k的范围是0-2^31,而且x,y,z都是正整数,由题易知道2<=z<31,1<=x<y;所以直接枚举就好了!!! #include<iostream> #in ...

  10. APAC Practice

    2016 round A A. Googol String small && large LL a[]; int dfs(LL pos, int id, bool f) { || po ...