开始学习Jqgrid,记录学习的点点滴滴,大牛勿喷。
一、下载Jqgrid和UI theme:
Jqgrid下载地址:http://www.trirand.com/blog/?page_id=6 (说明:本文是基于Jqgrid3.6.5)
UI theme下载地址:http://jqueryui.com/download/ (说明:本文是基于Jquery UI -1.10.2)
二、安装:
步骤一:解压上述两个压缩包。
步骤二:在Web目录下创建一个文件夹用来放置jqgrid文件,例如:jqgrid。
步骤三:在jqgrid文件夹下,创建js文件夹和css文件夹。
步骤四:将jqgrid压缩包中的css文件夹下的ui.jqgrid.css文件复制到项目的css文件夹中;
将jqgrid压缩包中的js文件夹下所有文件复制到项目的js文件夹中。
步骤五:将jquery-ui-1.10.2压缩包中css文件夹下的ui-lightness文件夹复制到项目的css文件夹下。
此时目录为:
三、创建第一个Grid:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <Meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>my firstGrid</title> <link rel="stylesheet" type="text/css" media="screen" href="jqgrid/css/ui-lightness/jquery-ui-1.10.2.custom.css" /> <!-- 加载用户UI主题 --> <link rel="stylesheet" type="text/css" media="screen" href="jqgrid/css/ui.jqgrid.css" /> <!-- 加载jqgrid样式 --> <script src="jqgrid/js/jquery-1.4.2.min.js" type="text/javascript"></script> <!-- 加载jquery --> <script src="jqgrid/js/i18n/grid.locale-cn.js" type="text/javascript"></script> <!-- 加载jqgrid语言文件 (必须在jqgrid文件之前加载)--> <script src="jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script> <!-- 加载jqgrid文件 --> <!-- 统一字体和格式(推荐) --> <style> html,body { margin: 0; padding: 0; font-size: 75%; } </style> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery("#list").jqGrid({ url:'jqgrid_xml.do',datatype: 'xml',mtype: 'GET',colNames:['id','name','sex','mail','qq','tel','birthday'],colModel :[ {name:'id',index:'id',width:55},{name:'name',index:'name',width:90},{name:'sex',index:'sex',width:80,align:'right'},{name:'mail',index:'mail',{name:'qq',index:'qq',{name:'tel',index:'tel',{name:'birthday',index:'birthday',width:150,sortable:false} ],pager: '#pager',rowNum:5,rowList:[5,10,20,30],sortname: 'id',sortorder: 'desc',viewrecords: true,caption: 'My first grid' }).navGrid("#pager",{ edit : true,add : true,del : true,search : true,refresh : true }); }); </script> </head> <body> <table id="list"></table> <div id="pager"></div> </body> </html>
四、创建表,根据以上colNames中的字段。(注意要在项目中加入jdbc包)
1、创建User实体类
package entity; import java.util.Date; public class User { private int id; private String name; private String sex; private String mail; private int qq; private int tel; private Date birthday; public int getTel() { return tel; } public void setTel(int tel) { this.tel = tel; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public int getQq() { return qq; } public void setQq(int qq) { this.qq = qq; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
2、创建JqgridDao类操作数据库
package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.sqlException; import java.util.ArrayList; import java.util.List; import entity.User; public class JqgridDao { protected Connection conn = null; protected PreparedStatement pstmt = null; protected ResultSet res = null; private String driver = "oracle.jdbc.driver.OracleDriver"; private String user = "system"; private String password = "ok"; private String url = "jdbc:oracle:thin:@localhost:1521:orcl"; public void openCon(){ try { Class.forName(driver); conn = DriverManager.getConnection(url,user,password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (sqlException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void closeCon(){ try { if(res != null){ res.close(); } if(pstmt != null){ pstmt.close(); } if(conn != null){ conn.close(); } } catch (sqlException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 获取User表分页数据 * @return */ public List<User> getAll(int max,int min,String orderName,String order){ List<User> list = new ArrayList<User>(); this.openCon(); //String sql = "select * from (select rownum rn,u.* from users u order by ?,?) where rn>=? and rn<=?"; String sql = "select * from (select rownum rn,u.* from (select * from users order by ?,?) u ) where rn>=? and rn<=?"; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1,orderName); pstmt.setString(2,order); pstmt.setInt(3,min); pstmt.setInt(4,max); res = pstmt.executeQuery(); while(res.next()){ User user = new User(); user.setId(res.getInt("id")); user.setMail(res.getString("mail")); user.setName(res.getString("name")); user.setQq(res.getInt("qq")); user.setTel(res.getInt("tel")); user.setSex(res.getString("sex")); user.setBirthday(res.getDate("birthday")); list.add(user); } } catch (sqlException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.closeCon(); return list; } /** * 获取User表总记录数 * @return */ public int getCount(){ this.openCon(); int count = 0 ; String sql = "select count(*) from users"; try { pstmt = conn.prepareStatement(sql); res = pstmt.executeQuery(); while(res.next()){ count = res.getInt(1); } } catch (sqlException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.closeCon(); return count; } }
3、创建并配置一个Servlet:
package servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.JqgridDao; import entity.User; /** * Servlet implementation class JqgridServlet */ @WebServlet("/JqgridServlet") public class JqgridServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public JqgridServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request,HttpServletResponse response) */ protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { this.doPost(request,response); } /** * @see HttpServlet#doPost(HttpServletRequest request,HttpServletResponse response) * 获取数据库数据 */ protected void doPost(HttpServletRequest request,IOException { response.setCharacterEncoding("utf-8"); //获取jqgrid传过来的参数 int page = Integer.parseInt(request.getParameter("page"));//得到请求的页数,默认为1 int rows = Integer.parseInt(request.getParameter("rows"));//得到想要每页显示的行数 String sidx = request.getParameter("sidx");//排序的列名 String sord = request.getParameter("sord");//升序还是降序(asc or desc) //设置分页参数 int min = (page-1) * rows + 1; int max = page * rows; JqgridDao jqDao = new JqgridDao(); List list = jqDao.getAll(max,min,sidx,sord); //计算总页数 int count = jqDao.getCount(); int total = count % rows == 0 ? count/rows : count/rows + 1; //拼接xml StringBuffer result = new StringBuffer("<?xml version='1.0' encoding='utf-8'?>"); result.append("<rows>"); result.append("<page>"+page+"</page>");//当前页 result.append("<total>"+total+"</total>");//总页数 result.append("<records>"+count+"</records>");//总记录数 for (int i = 0; i < list.size(); i++) { User user = (User) list.get(i); result.append("<row id='"+user.getId()+"'>"); result.append("<cell>"+user.getId()+"</cell>"); result.append("<cell>"+user.getName()+"</cell>"); result.append("<cell>"+user.getSex()+"</cell>"); result.append("<cell>"+user.getMail()+"</cell>"); result.append("<cell>"+user.getQq()+"</cell>"); result.append("<cell>"+user.getTel()+"</cell>"); result.append("<cell>"+user.getBirthday()+"</cell>"); result.append("</row>"); } result.append("</rows>"); PrintWriter out = response.getWriter(); out.print(result.toString()); } }
在web.xml中配置
<servlet> <servlet-name>jqgridServlet</servlet-name> <servlet-class>servlet.JqgridServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>jqgridServlet</servlet-name> <url-pattern>/jqgrid_xml.do</url-pattern> </servlet-mapping>
六、第二种xml配置(拼接xml的方式不同):
1、jsp:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <Meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>my firstGrid</title> <!--------------------------- 普通版本的配置------------------------------------> <link rel="stylesheet" type="text/css" media="screen" href="jqgrid/css/ui-lightness/jquery-ui-1.10.2.custom.css" /> <!-- 加载用户UI主题 --> <link rel="stylesheet" type="text/css" media="screen" href="jqgrid/css/ui.jqgrid.css" /> <!-- 加载jqgrid样式 --> <script src="jqgrid/js/jquery-1.4.2.min.js" type="text/javascript"></script> <!-- 加载jquery --> <script src="jqgrid/js/i18n/grid.locale-cn.js" type="text/javascript"></script> <!-- 加载jqgrid语言文件 (必须在jqgrid文件之前加载)--> <script src="jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script> <!-- 加载jqgrid文件 --> <!-- 统一字体和格式(推荐) --> <style> html,body { margin: 0; padding: 0; font-size: 75%; } </style> <script type="text/javascript"> // 设置全局属性(隔行换色) jQuery.extend(jQuery.jgrid.defaults,{ altRows:true }); </script> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery("#list").jqGrid({ url:'jqgrid_xml2.do',//返回数据的类型 mtype: 'GET',//get or post colNames:['id',colModel :[ { name:'id',//name不一定要和表名相同 index:'id',//? xmlmap : 'id',//设置得到数据的字段名称(注:Jqgrid先识别'xmlmap',如果未设置xmlmap,则识别name;前提是xmlReader中的repeatitems设置为'false') width:55,align:'center',//align:对齐方式 sortable:false //sortable:点击该列是否能排序 },width:90,align:'center'},},sortable:false,align:'center'} ],altRows:false,//取消斑马纹(隔行换色),注:覆盖了全局设置 pager: '#pager',//设置导航栏 rowNum:5,//每页显示的行数 rowList:[5,//每页显示的行数(可在前台更改) sortname: 'id',//排序的列名(初始时) sortorder: 'desc',//排序的方式 viewrecords: true,//是否可以看到总记录 caption: 'My first grid',//设置标题栏,不设标题栏将不可见 xmlReader : { root : 'rows',//根节点 row : 'row',//行节点(必须是根节点的子节点) page : 'page',//当前页 total : 'total',//总页数 records : 'records',//总记录数 repeatitems : false,//!此时应设为false,并且没有cell属性 id : '[id]'//? //id : '[id]',行中的id属性值 } }).navGrid("#pager",{ edit : true,refresh : true }); }); </script> </head> <body> <table id="list"></table> <div id="pager"></div> </body> </html>
2、Servlet:
package servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.JqgridDao; import entity.User; /** * Servlet implementation class JqgridServlet */ @WebServlet("/JqgridServlet") public class Servlet4Xml2 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Servlet4Xml2() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request,sord); //计算总页数 int count = jqDao.getCount(); int total = count % rows == 0 ? count/rows : count/rows + 1; //拼接xml StringBuffer result = new StringBuffer("<?xml version='1.0' encoding='utf-8'?>"); result.append("<rows>"); result.append("<page>"+page+"</page>");//当前页 result.append("<total>"+total+"</total>");//总页数 result.append("<records>"+count+"</records>");//总记录数 //拼接的格式与Grid4Xml1不同(cell换成字段名称作为标签名称) for (int i = 0; i < list.size(); i++) { User user = (User) list.get(i); result.append("<row id='"+user.getId()+"'>"); result.append("<id>"+user.getId()+"</id>"); result.append("<name>"+user.getName()+"</name>"); result.append("<sex>"+user.getSex()+"</sex>"); result.append("<mail>"+user.getMail()+"</mail>"); result.append("<qq>"+user.getQq()+"</qq>"); result.append("<tel>"+user.getTel()+"</tel>"); result.append("<birthday>"+user.getBirthday()+"</birthday>"); result.append("</row>"); } result.append("</rows>"); PrintWriter out = response.getWriter(); out.print(result.toString()); } }
其他不做改变。