`
ynial
  • 浏览: 227947 次
  • 来自: ...
社区版块
存档分类
最新评论

jquery grid插件 Flexigrid + servlet

阅读更多
前些日子写了个源于jquery grid插件Flexigrid  算不上例子的一片文章。
为了能更快的使用这个东东 。。 今天做了一个相对比较详细的例子.
对一个工作信息表操控的例子。

第一步:创建数据库
/*
MySQL Data Transfer
Source Host: localhost
Source Database: spiderdata
Target Host: localhost
Target Database: spiderdata
Date: 2008/9/2 10:42:51
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for job_info1
-- ----------------------------
CREATE TABLE `job_info1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `job_name` varchar(255) DEFAULT NULL,
  `company_email` text,
  `date` varchar(255) DEFAULT NULL,
  `work_address` varchar(255) DEFAULT NULL,
  `number` varchar(255) DEFAULT NULL,
  `work_limit` varchar(255) DEFAULT NULL,
  `level` varchar(255) DEFAULT NULL,
  `salary` varchar(255) DEFAULT NULL,
  `job_id` varchar(255) DEFAULT NULL,
  `description` mediumtext,
  `language` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `jobid` (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=42234 DEFAULT CHARSET=utf8;
sql 文件在附件中
第二步:下载Flexigrid 插件
http://www.webplicity.net/flexigrid/
第三步:解压下载后的zip文件到你的web工程中

第四步:编写jsp代码
<%@page contentType="text/html; charset=utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
		<title>Flexigrid测试</title>
		<link rel="stylesheet" href="style.css" />
		<link rel="stylesheet" type="text/css"
			href="css/flexigrid/flexigrid.css">
		<script type="text/javascript" src="lib/jquery/jquery.js"></script>
		<script type="text/javascript" src="flexigrid.js"></script>
	</head>
	<body>
		<table id="flex1" style="display: none"></table>
		<script type="text/javascript">
			$("#flex1").flexigrid
			(
			{
			url: 'http://localhost:8080/Flexigrid/DBServlet',
			dataType: 'json',
			colModel : [
				{display: 'ID', name : 'jobid', width : 10, sortable : true, align: 'center'},
				{display: '职位名称', name : 'job_name', width : 180, sortable : true, align: 'left'},
				{display: '工作地点', name : 'work_address', width : 80, sortable : true, align: 'left'},
				{display: '工作年限', name : 'work_limit', width : 80, sortable : true, align: 'left'},
				{display: '薪金', name : 'salary', width : 80, sortable : true, align: 'left'}
				],
			buttons : [
				{name: 'Add', bclass: 'add', onpress : test},
				{name: 'Delete', bclass: 'delete', onpress : test},
				{separator: true}
				],
			searchitems : [
				{display: '职位名称', name : 'jobtitle'},
				{display: '地点', name : 'workplace', isdefault: true}
				],
			usepager: true,
			title: '最新职位',
			useRp: true,
			rp: 15,
			showTableToggleBtn: true,
			width: 700,
			height: 200
			}
			);
			
			function test(com,grid)
			{
				if (com=='Delete')
					{
						confirm('Delete ' + $('.trSelected',grid).length + ' items?')
					}
				else if (com=='Add')
					{
						alert('Add New Item');
					}			
			}

		</script>
	</body>


以上代码相关参数讲解:

    url: 'http://localhost:8080/Flexigrid/DBServlet' ajax访问的url
    dataType: 'json', 响应的数据类型
    colModel [....] 表格中显示列的设置....
    buttons 按钮设置 根据业务不同 添加适合业务的按钮
    searchitems 查询下拉列表中的选项设置
    usepager: true, 是否分页
    title: '最新职位', 表头
    useRp: true, 用户自定义分页
    rp: 15, 每页显示多少数据
    showTableToggleBtn: true, 略
    width: 700, 略
    height: 200 略

第五步:后台访问数据库代码 以及 生成json字符串代码
package com.url.db;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

import com.url.ajax.json.JSONObject;

public class DBTest {
	
	/**
	 * 简单的数据库连接
	 * @return
	 */
    public static DataSource setupDataSource() {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUsername("root");
        ds.setPassword("password");
        ds.setUrl("jdbc:mysql://localhost:3306/spiderdata?useUnicode=true&amp;characterEncoding=utf-8");
        return ds;
    }
    /**
     * 按相关条件查询数据
     * @param startIndex
     * @param maxResult
     * @return
     */
    @SuppressWarnings("unchecked")
	public List getJobInfo(int startIndex, int maxResult) {
    	QueryRunner queryRunner = new QueryRunner(setupDataSource());
    	String sql = "select * from job_info1 limit ?, ?";
    	List joblist = null;
		try {
			joblist = (List)queryRunner.query(sql, new Object[]{startIndex, maxResult}, new MapListHandler());
		} catch (SQLException e) {
			e.printStackTrace();
		}
    	return joblist;
    }
    
    /**
     * 计算总数据量
     * @return
     */
    @SuppressWarnings("unchecked")
	public long getJobCount() {
    	String sql = "select count(*) as num from job_info1";
    	QueryRunner queryRunner = new QueryRunner(setupDataSource());
    	long count = 0L;
    	try {
    		Map map = (Map)queryRunner.query(sql, new MapHandler());
    		count  = (Long)map.get("num");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return count;
    }
    /**
     * 产生json字符串
     * @param list
     * @param pageInfo
     * @return
     */
    @SuppressWarnings("unchecked")
    public String getJsonString(List list, Map pageInfo) {
    	List mapList = new ArrayList();   
    	for(int i = 0; i < list.size(); i++) {
    		Map cellMap = new HashMap();
    		cellMap.put("id", ((Map)list.get(i)).get("id"));
    		cellMap.put("cell", new Object[] {((Map)list.get(i)).get("id"), ((Map)list.get(i)).get("job_name"), ((Map)list.get(i)).get("work_address"), ((Map)list.get(i)).get("work_limit"), ((Map)list.get(i)).get("salary")});   
    		mapList.add(cellMap);
    	}
    	pageInfo.put("rows", mapList);
    	JSONObject object = new JSONObject(pageInfo);
    	return object.toString();
    }
    
    /**
     * 测试。。。。。
     * @param args
     */
    @SuppressWarnings("unchecked")
	public static void main(String[] args) {
    	DBTest test = new DBTest();
		Map pageInfo = new HashMap();   
		pageInfo.put("page", 2);   
		pageInfo.put("total", 200);  
    	System.out.println(test.getJsonString(test.getJobInfo(0, 3), pageInfo));

	
	}
 
}


以上代码测试后得到的json字符串
{"total":200,"page":2,"rows":[{"id":1,"cell":[1,"Key Account Manager/大客户经理(CFC)  ","北京","5-10年","面议"]},{"id":2,"cell":[2,"Key Account Manager/大客户经理(CFC)  ","北京","5-10年","面议"]},{"id":3,"cell":[3,"Key Account Manager/大客户经理(CFC)  ","北京","5-10年","面议"]}]}

第六步:后台servlet处理
本部分代码值得注意的是 你后台接受ajax请求是post提交上来的,所以在servlet里的post方法中处理。如果你使用的其他的web框架 可以不用考虑
package com.url.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

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

import com.url.db.DBTest;

public class DBServlet extends HttpServlet {

	public DBServlet() {
		super();
	}


	public void destroy() {
		super.destroy(); 
	
	}

	@SuppressWarnings("unchecked")
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到当前页数
		String page = request.getParameter("page");
		//得到每页显示行数
		String maxResult = request.getParameter("rp");
		//计算查询开始数据下标
		int startIndex = (Integer.parseInt(page) - 1) * Integer.parseInt(maxResult);
		//数据操控对象昂
		DBTest dbTest = new DBTest();
		//创造json所需的Map(此处代码可使用StringBuffer 拼接json字符串代替,但这种做法比较繁琐)
		Map pageInfo = new HashMap();
		//当前页数设置
		pageInfo.put("page", page);
		//总数据量设置
		pageInfo.put("total", dbTest.getJobCount());
		//生成json字符串
		String jsonStr = dbTest.getJsonString(dbTest.getJobInfo(startIndex, Integer.parseInt(maxResult)), pageInfo);
		//response 相关处理
		response.setContentType("html/txt");
		response.setCharacterEncoding("utf-8");
		response.setHeader("Pragma", "no-cache");
		response.setHeader("Cache-Control", "no-cache, must-revalidate");
		response.setHeader("Pragma", "no-cache");
		try {
			response.getWriter().write(jsonStr);
			response.getWriter().flush();
			response.getWriter().close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}


第七步:测试你的代码
第九步:本例代码下载 :) 祝你好运
http://ynial.iteye.com/upload/attachment/37213/beaacf16-831a-33b2-b960-09d028d13668.rar
  • 描述: 拷贝相关文件到工程中
  • 大小: 13.8 KB
  • 描述: demo显示结果
  • 大小: 38.6 KB
16
3
分享到:
评论
19 楼 l932 2013-09-24  
下载了源代码,导入工程,启动之后,表格只显示“Processing, please wait ..”
我在Servlet的doPost方法第一行System.out.print的语句都出不来
页面是不是根本就没调用url啊
我用ie10和chrome
18 楼 java_MagicWang 2012-06-29  
chinajj 写道

//add search box
g.sDiv.className = 'sDiv';
/* ********************************* 原来的代码注释掉
sitems = p.searchitems;
var sopt = "";
for (var s = 0; s < sitems.length; s++)
{
if (p.qtype=='' && sitems[s].isdefault==true)
{
p.qtype = sitems[s].name;
sel = 'selected="selected"';
} else sel = '';
sopt += "<option value='" + sitems[s].name + "' " + sel + " >" + sitems[s].display + "&nbsp;&nbsp;</option>";
}
if (p.qtype=='') p.qtype = sitems[0].name;
$(g.sDiv).append("<div class='sDiv2'>Quick Search <input type='text' size='30' name='q' class='qsbox' /> <select name='qtype'>"+sopt+"</select> <input type='button' value='Clear' /></div>"); $('input[name=q],select[name=qtype]',g.sDiv).keydown(function(e){if(e.keyCode==13) g.doSearch()});
$('input[value=Clear]',g.sDiv).click(function(){$('input[name=q]',g.sDiv).val(''); p.query = ''; g.doSearch(); });
$('input[value=Clear]',g.sDiv).click(function(){$('input[name=q]',g.sDiv).val(''); p.query = '';  });
原来的代码注释掉 ********************************** */

$(g.sDiv).append("<div class='sDiv2'><form id='searchForm'></form></div>");
p.searchitems(g);
$(g.bDiv).after(g.sDiv);

这里需要注意:<form id='searchForm'></form> 的内容需要另外填充进去,我的做法是页面其它部分的js再生成一个ajax请求,把我后台设定好的搜索项目表单域组合填充进去。
chinajj 写道
if (p.page>p.pages) p.page = p.pages;
//var param = {page:p.newp, rp: p.rp, sortname: p.sortname, sortorder: p.sortorder, query: p.query, qtype: p.qtype};
/* ******************************** 原来的代码注释掉
var param = [
{ name : 'page', value : p.newp }
,{ name : 'rp', value : p.rp }
,{ name : 'sortname', value : p.sortname}
,{ name : 'sortorder', value : p.sortorder }
,{ name : 'query', value : p.query}
,{ name : 'qtype', value : p.qtype}

];
if (p.params)
{
for (var pi = 0; pi < p.params.length; pi++) param[param.length] = p.params[pi];
}
原来的代码注释掉 ************************ */

var u="&page="+p.newp+"&rp="+p.rp+"&sortname="+p.sortname+"&sortorder="+p.sortorder;
$.ajax({
type: p.method,
/* ***** 原来的代码注释掉
        url: p.url,
data: param,
原来的代码注释掉 **** */
url: p.url+u,
data: $("form:first",g.sDiv).formHash(),
dataType: p.dataType,
success: function(data){g.addData(data);},
error: function(data) { try { if (p.onError) p.onError(data); } catch (e) {} }
});
就是把它以前ajx提交的 data 都换成 url参数提交,反正他以前要提交的参数是固定的。
把最终ajax要提交的 data 换成 我的搜索表单的内容。 $("form:first",g.sDiv).formHash()这里使用了另外一个jquery插件http://www.pengoworks.com/workshop/jquery/field/field.plugin.htm的jquery.field.js  来取得搜索表单的hash,比较方便。jquery.field.js 里面作者有个明显的手误。呵呵,并且取 型如 user.name  就是带.的表单的域的值的会有问题,取不出来值,也得做些小改

能告诉我jquery.field.js你是怎么改的吗?我遇到了这个问题,不能以对象的方式传,QQ416263135,非常感谢
17 楼 hanguokai1987 2012-02-23  
很好!但是代码只能借鉴!挺不错的!
16 楼 劉罡 2010-06-25  
请问表头排序应该怎么做?
sortable:true设置了,但是没有排序的效果
15 楼 justdo2008 2009-09-03  
您好,请我你讲解的

width: 700, 略
height: 200 略

他们可以用百分比嘛?

我把
700改为80%出错了,暂时没有找到解决办法。

请我您有好的解决办法?

谢谢
14 楼 justdo2008 2009-09-02  
很不错,谢谢
13 楼 tigarlion 2008-12-26  
有没有改良后的代码,能否共享一下,想在一个项目里用一下,谢谢各位!
12 楼 tcrct 2008-09-30  
你好,能开放出已经修改了的js文件吗?即可以完成完整功能的。如,改页面显示数,排序,查询,分页的。如果可以,请发送到tcrct@163.com.谢谢
11 楼 playfish 2008-09-03  
呵呵,一直很关注jqeury的grid插件,非常期待您的进一步改进。
10 楼 ynial 2008-09-03  
to java.hero 互相学习~ :)  互相交流
9 楼 java.hero 2008-09-03  
学习呵呵,期待交流
8 楼 ynial 2008-09-02  
等我抽点时间 把你的代码加上 ~ :)
7 楼 chinajj 2008-09-02  
if (p.page>p.pages) p.page = p.pages;
//var param = {page:p.newp, rp: p.rp, sortname: p.sortname, sortorder: p.sortorder, query: p.query, qtype: p.qtype};
/* ******************************** 原来的代码注释掉
var param = [
{ name : 'page', value : p.newp }
,{ name : 'rp', value : p.rp }
,{ name : 'sortname', value : p.sortname}
,{ name : 'sortorder', value : p.sortorder }
,{ name : 'query', value : p.query}
,{ name : 'qtype', value : p.qtype}

];
if (p.params)
{
for (var pi = 0; pi < p.params.length; pi++) param[param.length] = p.params[pi];
}
原来的代码注释掉 ************************ */

var u="&page="+p.newp+"&rp="+p.rp+"&sortname="+p.sortname+"&sortorder="+p.sortorder;
$.ajax({
type: p.method,
/* ***** 原来的代码注释掉
        url: p.url,
data: param,
原来的代码注释掉 **** */
url: p.url+u,
data: $("form:first",g.sDiv).formHash(),
dataType: p.dataType,
success: function(data){g.addData(data);},
error: function(data) { try { if (p.onError) p.onError(data); } catch (e) {} }
});
就是把它以前ajx提交的 data 都换成 url参数提交,反正他以前要提交的参数是固定的。
把最终ajax要提交的 data 换成 我的搜索表单的内容。 $("form:first",g.sDiv).formHash()这里使用了另外一个jquery插件http://www.pengoworks.com/workshop/jquery/field/field.plugin.htm的jquery.field.js  来取得搜索表单的hash,比较方便。jquery.field.js 里面作者有个明显的手误。呵呵,并且取 型如 user.name  就是带.的表单的域的值的会有问题,取不出来值,也得做些小改
6 楼 chinajj 2008-09-02  

//add search box
g.sDiv.className = 'sDiv';
/* ********************************* 原来的代码注释掉
sitems = p.searchitems;
var sopt = "";
for (var s = 0; s < sitems.length; s++)
{
if (p.qtype=='' && sitems[s].isdefault==true)
{
p.qtype = sitems[s].name;
sel = 'selected="selected"';
} else sel = '';
sopt += "<option value='" + sitems[s].name + "' " + sel + " >" + sitems[s].display + "&nbsp;&nbsp;</option>";
}
if (p.qtype=='') p.qtype = sitems[0].name;
$(g.sDiv).append("<div class='sDiv2'>Quick Search <input type='text' size='30' name='q' class='qsbox' /> <select name='qtype'>"+sopt+"</select> <input type='button' value='Clear' /></div>"); $('input[name=q],select[name=qtype]',g.sDiv).keydown(function(e){if(e.keyCode==13) g.doSearch()});
$('input[value=Clear]',g.sDiv).click(function(){$('input[name=q]',g.sDiv).val(''); p.query = ''; g.doSearch(); });
$('input[value=Clear]',g.sDiv).click(function(){$('input[name=q]',g.sDiv).val(''); p.query = '';  });
原来的代码注释掉 ********************************** */

$(g.sDiv).append("<div class='sDiv2'><form id='searchForm'></form></div>");
p.searchitems(g);
$(g.bDiv).after(g.sDiv);

这里需要注意:<form id='searchForm'></form> 的内容需要另外填充进去,我的做法是页面其它部分的js再生成一个ajax请求,把我后台设定好的搜索项目表单域组合填充进去。
5 楼 chinajj 2008-09-02  
两处大改动。基本思路是把它现有搜索部分干掉,换成自己的表单内容。然后再改掉它现在现有的提交数据部分,改成适合的即可。
4 楼 ynial 2008-09-02  
to chinajj  可以交流一下!就像你说的那样他提供的搜索确实简单了些。 我考虑在他的查询部分做一个覆盖弹出层处理!可以在弹出层上多做些查询条件  这样可以方便不同的业务 可以使用thickbox 或者其他的别的东西!
3 楼 ynial 2008-09-02  
内存泄漏到不至于,
最关键的问题在于每次翻页的时候都需要计算一下count 这个就比较讨厌
还没有仔细看看 底层的代码! 希望能把这个 问题搞定就好了
2 楼 chinajj 2008-09-02  
最近正好使用Flexigrid做列表js,后台用springmvc做一个小项目,有机会可以交流一下。我主要把Flexigrid的搜索部分改了一下,现在的搜索太简单了。
1 楼 a3mao 2008-09-02  
不知道这个控件有没有内存泄漏的问题?

相关推荐

    Flexigrid + servlet

    Flexigrid + servlet Flexigrid + servlet Flexigrid + servlet

    jquery+flexigrid+json的java例子(网上收集的)

    总结来说,这个“jquery+flexigrid+json的java例子”演示了如何利用jQuery进行前端交互,Flexigrid显示数据,JSON作为数据交换格式,以及Java处理后端逻辑。这是一个典型的前后端分离的Web应用架构,对于学习现代Web...

    jquery表格插件Flexigrid

    Flexigrid是一款基于jQuery的强大的表格插件,它允许开发者将数据以美观、可操作的表格形式呈现出来,类似于知名的JavaScript框架ExtJS的表格组件。这个插件的主要优点在于其灵活性和可定制性,能够满足各种复杂的...

    jQuery表格插件 Flexigrid的例子

    Flexigrid是一个类似于Ext Gird,但基于jQuery开发的Grid。它具有的功能包括:可以调整列宽,合并列标题,分页,排序,显示/隐藏表格等。Flexigrid显示的数据能够通过Ajax获取或者从一个普通的表格转换。这个例子对...

    JQuery_插件FlexiGrid_之完全配置与使用

    ### JQuery插件FlexiGrid之完全配置与使用 #### 一、引言 FlexiGrid是一款基于jQuery的轻量级表格插件,它为开发者提供了简单易用的方式来展示和操作数据表格。FlexiGrid支持多种功能,如排序、分页、筛选等,非常...

    struts2+spring3+hibernate3+jquery+flexigrid+mysql实例

    5. **Flexigrid**:Flexigrid 是一个基于jQuery的表格插件,提供分页、排序、搜索等功能,使得在Web页面上展示大量数据变得更加直观和高效。在本实例中,Flexigrid 可能用于展示由后端Struts2和Hibernate查询得到的...

    jquery 表格插件 Flexigrid

    Flexigrid是一款基于jQuery的开源表格插件,它为网页开发者提供了一种高效、灵活的方式来展示数据,并且具有丰富的功能和自定义选项。这个插件的设计目标是使数据的显示和操作变得更加简单,同时保持良好的性能和...

    jquery插件之flexigrid篇

    Flexigrid是一款基于jQuery的轻量级数据网格插件,专为实现强大的表格展示和操作功能而设计。在Web开发中,特别是在构建数据密集型应用时,它提供了一种高效且用户友好的方式来显示、排序、筛选和操作数据。这款插件...

    flexigrid+struts2+json+jquery实例

    Flexigrid是一款强大的JavaScript表格插件,它允许开发者在网页上创建可滚动、可排序、带分页功能的网格视图。在这个实例中,Flexigrid与Struts2、JSON和jQuery进行了集成,构建了一个功能丰富的Web应用。 Struts2...

    jquery表格插件flexigrid-1.1.zip

    Flexigrid是一个类似于Ext Gird,但基于jQuery开发的Grid。它具有的功能包括:可以调整列宽,合并列标题,分页,排序,显示/隐藏表格等。Flexigrid显示的数据能够通过Ajax获取或者从一个普通的表格转换。

    flexigrid+rails 新手代码-。-

    标题 "flexigrid+rails 新手代码-。-" 指涉的是一个关于使用 Flexigrid 和 Ruby on Rails 框架的初级教程或示例项目。Flexigrid 是一个 JavaScript 库,常用于创建可扩展、灵活的表格,而 Ruby on Rails 是一个流行...

    jquery插件之flexigrid学习实例-jar包

    Flexigrid是一款基于jQuery的表格插件,它提供了丰富的功能,如数据分页、排序、搜索和自定义列宽等,极大地增强了网页中表格的展示效果和交互性。在"jquery插件之flexigrid学习实例-jar包"中,我们主要关注的是如何...

    jquery插件之flexigrid学习实例

    Flexigrid是一款基于jQuery的表格插件,它提供了丰富的功能,如数据分页、排序、搜索和自定义列显示,适用于构建数据密集型Web应用。在这个"jquery插件之flexigrid学习实例"中,我们将深入探讨如何在Struts2框架下...

    Spring MVC+JPA+Jquery+Flexigrid修改简单示例

    4. **Flexigrid**:Flexigrid是一款基于jQuery的数据网格插件,用于展示和管理表格数据。它可以实现分页、排序、搜索等功能,提供了一种灵活的方式显示大量结构化的数据。在Spring MVC和JPA后端提供数据的基础上,...

    JQuery_插件FlexiGrid_之完全配置与使用.doc

    JQuery FlexiGrid 插件是一款强大的数据网格组件,用于在网页中展示和管理结构化的数据。它提供了丰富的功能,包括排序、分页、搜索、编辑和自定义操作按钮等。下面将详细介绍FlexiGrid的配置和使用方法。 首先,你...

    jquery grid demo

    `jQuery Grid` 是一个强大的数据网格插件,它允许开发者在网页上展示和操作结构化的数据。本演示集中了 `jQuery Flexigrid` 和 `DatePicker` 的应用,旨在展示如何结合这两个组件来创建功能丰富的用户界面。 ### ...

    Struts1+hibernate+spring+flexigrid+jsmodal 集成

    使用了框架是Struts1+hibernate+spring 集成了JQuery的FlexiGrid表格插件以及 jsmodal弹出框插件 一个增删改列表 数据库使用的是MYSQL 内有建表语句 数据库配置请自行配置本机数据库

Global site tag (gtag.js) - Google Analytics