`

jQuery学习之:jqGrid表格插件——从servlet获得数据

阅读更多
在我的jqGrid第一个demo中,没有涉及到任何与服务端的交互:数据是从自己定义的一个固定数组中得到的。当然,实际应用中不可能会这么做。在jqGrid官方网站上提供的demo,服务器端全部是PHP,在网上找了很久,也没有找到写的完整详细的从JSP/Servlet获得数据的例子。下面是我写的一个从Servlet获得数据的例子,希望对初学者有点帮助。

jqGrid支持的好几种数据类型,现在使用比较多的是JSON。本文中也采用这种数据类型。另外,本文使用了json-lib,因而您也需要下载json-lib.jar,可以到http://json-lib.sourceforge.net/上下载,且该网站上有关于json-lib的详细介绍与使用。感兴趣的可以阅读。

下面开始我们的jqGrid与Servlet之旅吧。

1、效果图:



这个跟第一个Demo看起来没有什么区别。的确没啥区别。只是这次的数据是从服务器端获取的。

2、代码及解释

<body>
		<table id="gridTable"></table>
		<div id="gridPager"></div>
	</body>

html代码跟之前一样,很简单。

$(function()
{
	$("#gridTable").jqGrid({
		url:'jqGridServlet',
		datatype: "json",
		height: 250,
		colNames:['编号','用户名', '性别', '邮箱', 'QQ','手机号','出生日期'],
		colModel:[
			{name:'id',index:'id', width:60, sorttype:"int"},
			{name:'userName',index:'userName', width:90},
			{name:'gender',index:'gender', width:90},
			{name:'email',index:'email', width:125,sorttype:"string"},
			{name:'QQ',index:'QQ', width:100},		
			{name:'mobilePhone',index:'mobilePhone', width:120},		
			{name:'birthday',index:'birthday', width:100, sorttype:"date"}
		],
		sortname:'id',
		sortorder:'asc',
		viewrecords:true,
		rowNum:10,
		rowList:[10,20,30],
		jsonReader:{
			repeatitems : false
		},
		pager:"#gridPager",
		caption: "jqGrid与Servlet集成"
	}).navGrid('#gridPager',{edit:false,add:false,del:false});
})

JavaScript的代码跟之前有几个地方不一样。其中,url:'jqGridServlet'的jqGridServlet是Servlet的url-pattern;datatype: "json"表示服务器端需要返回json数据;jsonReader:{repeatitems : false}则是为了后台处理数据方便而设置,具体意思见下面Java代码的注释。

package com.polaris.jqgrid.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 该Servlet向客户端返回一个json对象。为了简便,数据不是从数据库获得的。
 * jqGrid默认期望返回的json对象格式要求如下:
 * {"page":"1","total":"2","records":"13",
 * "rows":[
 * 		{id:"1",cell:["1","polaris","男","polaris@gmail.com","772618379","18329382732","1985-10-2"]},
 * 		{id:"2",cell:["2","张三","女","zhangsan@163.com","272618382","15329382732","1986-10-12"]},
 * 		{id:"3",cell:["3","王五","女","wangwu@yahoo.com","172635372","13329389832","1987-12-21"]},
 * 		{id:"4",cell:["4","赵六","男","zhaoliu@sina.com","372618332","18929343731","1988-09-22"]}
 * 	]
 * }
 * 当然,在js中,可以通过jqGrid的jsonReader属性来修改默认格式
 * 因为默认的格式,rows的数据要求顺序不能变,且每个字段都得有值(空也得有"")。因而,
 * 在jsonReader中定义repeatitems : false。这样,rows就变成了:
 * "rows":[
 * 		{id:"1",userName:"polaris",gender:"男",email:"polaris@gmail.com",QQ:"772618379",mobilePhone:"18329382732",birthday:"1985-10-2"]},
 * 		{id:"2",userName:"徐新华",gender:"男",email:"xh.xu@163.com",QQ:"272618382",mobilePhone:"15329382732",birthday:"1986-10-12"]},
 * 		{id:"3",userName:"王五",gender:"女",email:"wangwu@yahoo.com",QQ:"172635372",mobilePhone:"13329389832",birthday:"1987-12-21"]},
 * 		{id:"4",userName:"赵六",gender:"女",email:"zhaoliu@sina.com",QQ:"372618332",mobilePhone:"18929343731",birthday:"1988-09-22"]}
 * 	]
 * @author xuxinhua
 *
 */
public class JqGridForJSONServlet extends HttpServlet 
{
	private static final long serialVersionUID = 132383828833L;

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// 定义返回的数据类型:json,使用了json-lib
		JSONObject jsonObj = new JSONObject();
		
		// 根据jqGrid对JSON的数据格式要求给jsonObj赋值
		jsonObj.put("page", 1);		// 当前页
		jsonObj.put("total", 1);	// 总页数
		jsonObj.put("records", 4);	// 总记录数
		
		// 定义rows,存放数据
		JSONArray rows = new JSONArray();
		// 放入4条数据
		for(int i=0;i<4;i++)
		{
			// 存放一条记录的对象
			JSONObject cell = new JSONObject();
			cell.put("id", i);
			if(i%2==0)
			{
				cell.put("userName", "polaris");
				cell.put("gender", "女");
			}
			else
			{
				cell.put("userName", "徐新华");
				cell.put("gender", "男");
			}
			cell.put("email", "polaris@gmail.com");
			cell.put("QQ", "772"+i+"1837"+i);
			cell.put("mobilePhone", "132"+i+"1837"+i+"3"+i);
			cell.put("birthday", "198"+i+"-10-"+"1"+i);
			
			// 将该记录放入rows中
			rows.add(cell);
		}
		
		// 将rows放入json对象中
		jsonObj.put("rows", rows);
		
		// 自控制台打印输出,以检验json对象生成是否正确
		System.out.println("要返回的json对象:\n" + jsonObj.toString());
		
		// 设置字符编码
		resp.setCharacterEncoding("UTF-8");
		// 返回json对象(通过PrintWriter输出)
		resp.getWriter().print(jsonObj);
	}
	
	@Override
	public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req,resp);
	}
}

请注意看该类的详细注释。

<servlet>
  		<servlet-name>jqGridServletForJson</servlet-name>
  		<servlet-class>com.polaris.jqgrid.servlet.JqGridForJSONServlet</servlet-class>
  	</servlet>
  	
  	<servlet-mapping>
  		<servlet-name>jqGridServletForJson</servlet-name>
  		<url-pattern>/jqGridServlet</url-pattern>
  	</servlet-mapping>

web.xml中Servlet的配置

3、部署运行

导入必须的Jar包(记得导入json-lib依赖的jar包)。将工程打包部署到tomcat下,运行tomcat,在浏览器中访问写的jsp页面,如:http://localhost:8080/jqGrid/jqGrid_servlet.jsp,回车会出现效果图的效果。

总结:

可以看出,jqGrid集成Servlet还是很简单的,就jqGrid而言,它只需要请求一个Servlet,并设置期望返回的数据类型即可。而对于Servlet而言,这需要根据jqGrid期望返回的数据类型而定,通常都会选择json数据格式,因而,Servlet主要就是构造json数据,我们可以根据json的语法要求构建,然而,那样比较繁琐,会有很多的“{}"之类的,且不清晰,容易出错。而json-lib则是一个不错的选择,因为这时操作的只是Java对象,构建json很容易,结构清晰不容易出错。因而推荐采用。

如有问题,请留言;写的不好的还请指正。敬请期待jqGrid与struts2的集成。
  • 大小: 58.4 KB
3
0
分享到:
评论

相关推荐

    jqGrid表格应用——新增与删除数据

    它在Web应用程序中常被用来实现表格数据的增删查改操作,提供了丰富的配置选项和强大的API,使得开发者能够定制符合特定需求的数据表格。 在"jqGrid表格应用——新增与删除数据"这个主题中,我们可以探讨以下知识点...

    jqGrid插件--JQuery表格插件

    jqGrid是一款基于jQuery的开源表格插件,专为数据管理和展示设计,提供了丰富的功能和高度的自定义性。它在Web开发中广泛应用于构建高效、交互式的数据网格。以下是关于jqGrid的一些关键知识点: 1. **基本使用**:...

    jquery表格插件jqgrid

    **jQuery表格插件jqGrid详解** jqGrid是一款强大的基于JavaScript的开源网格控件,它能够为Web应用程序提供灵活、功能丰富的数据展示和操作界面。这款插件是jQuery库的一个扩展,专为处理大量数据和实现复杂的表格...

    Jquery表格插件jqGrid 4.3.0及其Demo

    **jQuery表格插件jqGrid 4.3.0详解** jqGrid是一款基于JavaScript的开源网格控件,它充分利用了jQuery库的强大功能,为Web开发者提供了丰富的数据展示和操作功能。jqGrid 4.3.0是该插件的一个重要版本,它在前一...

    jqGrid表格插件(带中文/英文文档)

    jqGrid是一款功能强大的JavaScript表格插件,用于在Web应用程序中展示和操作数据。它支持多种功能,如数据分页、排序、过滤、编辑和 AJAX 交互。这款插件基于 jQuery 库,使得开发者能够轻松地在网页上创建交互式、...

    jqGrid实例下载(数据交互,统计,时间插件都已实现)

    在本实例中,"jqGrid实例下载(数据交互,统计,时间插件都已实现)"意味着你将获得一个已经包含了数据交互、统计功能以及时间插件的完整jqGrid示例。 1. 数据交互:jqGrid能够轻松地与服务器进行数据交换。你可以...

    jqgrid表格插件

    jqGrid是一款功能强大的JavaScript表格插件,主要用于在Web页面中展示和操作数据。它基于jQuery库,提供了丰富的功能,如数据排序、分页、搜索、编辑等,使得开发者能够轻松创建交互式的表格。本篇文章将深入探讨...

    jqgrid jquery 表格插件

    **jqGrid jQuery 表格插件** jqGrid是一款基于jQuery的开源数据网格插件,它为Web应用程序提供了强大的数据展示和管理能力。这个插件深受开发者喜爱,因为它提供了丰富的功能和自定义选项,使得在网页上创建交互式...

    jqGrid表格插件学习(一) 第一个Demo

    jqGrid是一款功能强大的JavaScript表格插件,用于在Web页面中展示和操作数据。这篇博文将带你初探jqGrid,通过创建第一个Demo来了解其基本用法。以下是对jqGrid插件的一些关键知识点的详细说明: 1. **安装与引入**...

    jqGrid表格内容查询读取代码.zip

    这款开源插件基于jQuery库,提供了一系列高级功能,如分页、排序、筛选、编辑、添加和删除数据等。在"jqGrid表格内容查询读取代码.zip"压缩包中,我们可以找到实现jqGrid表格内容查询读取的相关代码。 首先,让我们...

    PHP+jqGrid表格插件实现增删改查

    jqGrid是一款基于jQuery的表格插件,它提供了一套强大的功能,如数据分页、排序、搜索和编辑。jqGrid支持AJAX无刷新加载,使得用户可以在不刷新整个页面的情况下,进行数据的增删改查操作,提高了用户体验。此外,...

    jquery.jqgrid最新版

    总结:jQuery.jqGrid是一款功能强大的表格组件,其全面的数据处理能力使得它在Web开发中占据了重要地位。通过深入学习和灵活运用,开发者可以构建出高效、美观的数据管理界面,提升用户体验。理解并熟练掌握jqGrid的...

    jqGrid表格数据展示插件

    jqGrid是一款功能强大的JavaScript表格插件,主要用于网页数据的展示、编辑和管理。它基于jQuery库,提供了丰富的功能,如分页、排序、过滤、编辑、添加、删除和搜索等,使得网页上的表格操作变得更加便捷和高效。在...

    数据表格JqGrid自适应列宽度

    JqGrid是一款基于jQuery的数据表格插件,它提供了一种高效、可定制的方式来展示和操作表格数据。本文将深入探讨“数据表格JqGrid自适应列宽度”这一主题,以帮助开发者更好地理解和实现这一功能。 首先,JqGrid允许...

    jqGrid(jqueryGrid表格操作demo)

    jqGrid是一款基于jQuery的开源数据网格插件,用于在网页上展示和操作表格数据,它提供了丰富的功能,如数据分页、排序、过滤、编辑、添加、删除等,且具有高度自定义性。这个"jqGrid(jqueryGrid表格操作demo)"是一...

    jqGrid表格插件

    综上所述,jqGrid是一款强大且灵活的表格插件,其丰富的功能和优秀的性能使其成为开发人员在构建数据密集型Web应用时的首选工具之一。通过深入理解和实践,可以充分发挥其潜力,打造高效的数据管理界面。

    jqgrid表格

    jqGrid是一款功能强大的JavaScript数据网格插件,常用于创建交互式的数据展示和管理表格。它提供了丰富的特性,如数据分页、排序、过滤、编辑、导入导出等,支持多种数据源,包括本地数据和远程服务(如JSON、XML、...

    jquery ui tabs_jqgrid demo

    从给定的文件信息来看,这是一段网页代码示例,主要展示了如何在网页中集成jQuery UI Tabs和jqGrid插件。以下是对标题、描述、标签以及部分内容中涉及的关键知识点的详细解读: ### 关键知识点:jQuery UI Tabs **...

    JQuery Mobile 中实现 jqGrid 数据分组

    另一方面,jqGrid是一个强大的JavaScript插件,它基于jQuery,用于创建动态、交互式的网格视图,支持各种数据操作,如排序、过滤、分页和分组。 在JQuery Mobile中使用jqGrid,我们需要做以下几个步骤: 1. **引入...

    jquery.jqGrid-4.4.0.zip

    《jQuery.jqGrid 4.4.0:构建动态数据表格的强大工具》 jQuery.jqGrid 是一个基于 jQuery 的开源JavaScript库,专为创建交互式、功能丰富的数据网格而设计。在版本4.4.0中,jqGrid 提供了丰富的特性和优化,使得在...

Global site tag (gtag.js) - Google Analytics