- 浏览: 84544 次
- 性别:
- 来自: 大连
最新评论
-
fxiaozj:
不知道能不能把JSON写一个通用的,要不然每个entity都得 ...
dhtmlxgrid 2.0 标准版 dwr实现增、删、改、查 -
mfkwfc:
为什么没看到json数据的格式呢?
dhtmlxgrid 2.0 标准版 dwr实现增、删、改、查 -
exindedan:
非常不错的教程,写得也很详细!希望能附上源代码!赞一个!
dhtmlxgrid 2.0 标准版 dwr实现增、删、改、查 -
yueyueaihuihui:
好文章!谢谢!
response.setContentType 对应的文件类型
dhtmlxgrid 2.0支持四种类型的数据:
- xml;- csv;- json;- javascript array.
下面只介绍xml,json类型的数据。
一、xml类型
dhtmlxgrid要求的xml格式如下:
<rows>
<head>
<beforeInit>
<call command="methodName"><param>string value</param></call>
</beforeInit>
<afterInit>
<call command="methodName"><param>string value</param></call>
</afterInit>
<column width="50" type="ed" align="right" color="white" sort="str">Sales</column>
<column width="80" type="co" align="left" sort="str">Shipping
<option value="1">1 Day</option>
<option value="7">1 Week</option>
...
</column>
...
<settings>
<colwidth>%</colwidth>
</settings>
</head>
<row id="1">
<cell>text</cell>
...
</row>
...
</rows>
<column>标签之间的文字是就是列标题
column 可用的属性有:
width - 宽,单位是像素
type - 列的类型
align - 单元格文本对齐方式
color - 列背景颜色
sort - 排序类型
id - 列id,可选
hidden -这个是专业版的属性,标准版不能使用。
设置列宽的单位是%,不设置默认是像素px。
<row>表格中的每一行,要有唯一的id值属性。
<cell>一行中的一个单元格。
xml中常用的字符串常量
下面这个类构造列,单元格,设置皮肤
下面这个类包含查询,删除,保存方法。里面有返回json数据的方法
Dhtmlxgrid是hibernate的数据库映射文件,再次为了方便直接在Service层使用,在实际项目中不推进这样做。Dhtmlxgrid代码如下
GridData、Rows都是构造json字符串用到的。这里返回字符串到前台,但是不能直接使用,还要转成json对象。我没想到更好的办法做这件事情
GridData代码:
Rows代码:
服务层接口代码IDhtmlxGridManager:
HandleException代码:
dao层接口代码:
dao接口实现类:
dao异常类:
到此后台代码都已经完成了。前台使用dwr远程调用这些方法。spring就不写出来。dwr.xml如下:
jsp代码也不列出来了,增加操作对应的js方法为add(),删除操作对应js方法del(),保存save();jsp页面中body中加入onload="initGrid('<%=contextPath %>');"
String contextPath = request.getContextPath();
js代码如下:
- xml;- csv;- json;- javascript array.
下面只介绍xml,json类型的数据。
一、xml类型
dhtmlxgrid要求的xml格式如下:
<rows>
<head>
<beforeInit>
<call command="methodName"><param>string value</param></call>
</beforeInit>
<afterInit>
<call command="methodName"><param>string value</param></call>
</afterInit>
<column width="50" type="ed" align="right" color="white" sort="str">Sales</column>
<column width="80" type="co" align="left" sort="str">Shipping
<option value="1">1 Day</option>
<option value="7">1 Week</option>
...
</column>
...
<settings>
<colwidth>%</colwidth>
</settings>
</head>
<row id="1">
<cell>text</cell>
...
</row>
...
</rows>
<column>标签之间的文字是就是列标题
column 可用的属性有:
<row>表格中的每一行,要有唯一的id值属性。
<cell>一行中的一个单元格。
xml中常用的字符串常量
package com.javaeye.gzwfdy.util; public class Constants { public static final String XML_VERSION = "<?xml version=\"1.0\" encoding=\"GBK\"?>"; public static final String XML_ROWS_BEGIN = "<rows>"; public static final String XML_ROWS_END = "</rows>"; public static final String XML_HEAD_BEGIN = "<head>"; public static final String XML_HEAD_END = "</head>"; public static final String XML_AFTERINIT_BEGIN = "<afterInit>"; public static final String XML_AFTERINIT_END = "</afterInit>"; public static final String XML_BEFOREINIT_BEGIN = "<beforeInit>"; public static final String XML_BEFOREINIT_END = "</beforeInit>"; public static final String XML_CELL_BEGIN = "<cell>"; public static final String XML_CELL_END = "</cell>"; }
下面这个类构造列,单元格,设置皮肤
package com.javaeye.gzwfdy.util; public class GridXmlBuilder { public static StringBuffer createColumnXML(String width, String type, String align, String sort, String text){ StringBuffer xml = new StringBuffer(); if(width == null) width = "0"; if(text == null) text = ""; xml.append("<column "); xml.append("width=\"").append(width).append("\" "); xml.append("type=\"").append(type).append("\" "); xml.append("align=\"").append(align).append("\" "); xml.append("sort=\"").append(sort).append("\""); xml.append(">"); xml.append(text); xml.append("</column>"); return xml; } public static StringBuffer setGridSkin(String skin){ StringBuffer xml = new StringBuffer(); xml.append(Constants.XML_BEFOREINIT_BEGIN); xml.append("<call command=\"setSkin\">").append("<param>").append(skin).append("</param></call>"); xml.append(Constants.XML_BEFOREINIT_END); return xml; } public static StringBuffer createGridCellXml(Object value) { if (value == null) value = ""; StringBuffer xml = new StringBuffer(); xml.append(Constants.XML_CELL_BEGIN); xml.append(value); xml.append(Constants.XML_CELL_END); return xml; } }
下面这个类包含查询,删除,保存方法。里面有返回json数据的方法
package com.javaeye.gzwfdy.service.manager; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import com.javaeye.gzwfdy.dao.hibernate.IDhtmlxGridDAO; import com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid; import com.javaeye.gzwfdy.exception.DAOException; import com.javaeye.gzwfdy.exception.HandleException; import com.javaeye.gzwfdy.service.interfaceManager.IDhtmlxGridManager; import com.javaeye.gzwfdy.util.Constants; import com.javaeye.gzwfdy.util.GridXmlBuilder; import com.javaeye.gzwfdy.vo.GridData; import com.javaeye.gzwfdy.vo.Rows; public class DhtmlxGridManagerImpl implements IDhtmlxGridManager { /** * Logger for this class */ private static final Logger logger = Logger .getLogger(DhtmlxGridManagerImpl.class); private IDhtmlxGridDAO dhtmlxGridDAO; /** * @param dhtmlxGridDAO the dhtmlxGridDAO to set */ public void setDhtmlxGridDAO(IDhtmlxGridDAO dhtmlxGridDAO) { this.dhtmlxGridDAO = dhtmlxGridDAO; } public String getInitGridXML() throws HandleException { return this.BuildGridXML(); } private String BuildGridXML() { StringBuffer xml = new StringBuffer(); xml.append(Constants.XML_VERSION); xml.append(Constants.XML_ROWS_BEGIN); xml.append(createHeadXML()); xml.append(Constants.XML_ROWS_END); logger.info("构造表格XML为:" + xml); return xml.toString(); } private StringBuffer createHeadXML(){ StringBuffer xml = new StringBuffer(); xml.append(Constants.XML_HEAD_BEGIN); //xml.append(GridXmlBuilder.setGridSkin("modern")); //xml.append(GridXmlBuilder.setGridSkin("gray ")); //xml.append(GridXmlBuilder.setGridSkin("xp")); //xml.append(GridXmlBuilder.setGridSkin("mt")); xml.append(GridXmlBuilder.setGridSkin("light")); //xml.append(GridXmlBuilder.setGridSkin("clear")); xml.append(GridXmlBuilder.createColumnXML("20", "ch", "left", "int", "")); xml.append(GridXmlBuilder.createColumnXML("730", "ed", "left", "str", "消息")); xml.append(GridXmlBuilder.createColumnXML("90", "ed", "left", "str", "来源")); xml.append(GridXmlBuilder.createColumnXML("0", "ro", "left", "str", "")); xml.append(Constants.XML_HEAD_END); return xml; } public String getJsonData() throws HandleException { List<Dhtmlxgrid> list = null; List<GridData> gridDataList = new ArrayList<GridData>(); Rows rows = new Rows(); try { list = this.dhtmlxGridDAO.getData(); } catch (DAOException e) { // TODO: handle exception } for (Dhtmlxgrid dhtmlxgrid : list) { gridDataList.add(this.BuildeJsonData(dhtmlxgrid)); } rows.setRows(gridDataList); /** * 需要json-lib-2.2.2-jdk15.jar、ezmorph-1.0.5.jar */ JSONObject object = JSONObject.fromObject(rows); return object.toString(); } private GridData BuildeJsonData(Dhtmlxgrid dhtmlxgrid){ GridData griddata = new GridData(); String id = dhtmlxgrid.getId().toString(); String[] data = {"0",dhtmlxgrid.getMessage(),dhtmlxgrid.getInfosrc(),dhtmlxgrid.getId().toString()}; griddata.setId(id); griddata.setData(data); return griddata; } public String getXMLData() throws HandleException { StringBuffer xml = new StringBuffer(); xml.append(Constants.XML_VERSION); xml.append(Constants.XML_ROWS_BEGIN); List<Dhtmlxgrid> list = null; try { list = this.dhtmlxGridDAO.getData(); } catch (DAOException e) { e.printStackTrace(); throw new HandleException("getXMLData错误"); } for (Dhtmlxgrid dhtmlxgrid2 : list) { xml.append(this.buildXMLData(dhtmlxgrid2)); } xml.append(Constants.XML_ROWS_END); logger.info("XML为:" + xml); return xml.toString(); } private StringBuffer buildXMLData(Dhtmlxgrid dhtmlxgrid){ StringBuffer xml = new StringBuffer(); xml.append("<row id=\"" + dhtmlxgrid.getId().intValue() + "\">"); xml.append(GridXmlBuilder.createGridCellXml("0")); xml.append(GridXmlBuilder.createGridCellXml(dhtmlxgrid.getMessage())); xml.append(GridXmlBuilder.createGridCellXml(dhtmlxgrid.getInfosrc())); xml.append(GridXmlBuilder.createGridCellXml(dhtmlxgrid.getId())); xml.append("</row>"); return xml; } public boolean saveData(List<Dhtmlxgrid> dhtmlxgrid) throws HandleException { try { for (Dhtmlxgrid dhtmlxgrid2 : dhtmlxgrid) { if (dhtmlxgrid2.getId() == null) { //dhtmlxgrid2.setId(null); this.dhtmlxGridDAO.saveData(dhtmlxgrid2); } else this.dhtmlxGridDAO.updateData(dhtmlxgrid2); } } catch (DAOException e) { e.printStackTrace(); throw new HandleException("保存错误"); } return true; } public boolean deleteData(List<Dhtmlxgrid> dhtmlxgrid) throws HandleException { try { for (Dhtmlxgrid dhtmlxgrid2 : dhtmlxgrid) { this.dhtmlxGridDAO.deleteData(dhtmlxgrid2); } } catch (DAOException e) { e.printStackTrace(); throw new HandleException("删除失败"); } return true; } }
Dhtmlxgrid是hibernate的数据库映射文件,再次为了方便直接在Service层使用,在实际项目中不推进这样做。Dhtmlxgrid代码如下
package com.javaeye.gzwfdy.dao.hibernate.po; /** * Dhtmlxgrid entity. @author MyEclipse Persistence Tools */ public class Dhtmlxgrid implements java.io.Serializable { // Fields private Integer id; private String message; private String infosrc; // Constructors /** default constructor */ public Dhtmlxgrid() { } /** full constructor */ public Dhtmlxgrid(String message, String infosrc) { this.message = message; this.infosrc = infosrc; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getMessage() { return this.message; } public void setMessage(String message) { this.message = message; } public String getInfosrc() { return this.infosrc; } public void setInfosrc(String infosrc) { this.infosrc = infosrc; } }
GridData、Rows都是构造json字符串用到的。这里返回字符串到前台,但是不能直接使用,还要转成json对象。我没想到更好的办法做这件事情
GridData代码:
package com.javaeye.gzwfdy.vo; public class GridData { private String id; private String[] data; /** * @return the id */ public String getId() { return id; } /** * @param id the id to set */ public void setId(String id) { this.id = id; } /** * @return the data */ /** * @return the data */ public String[] getData() { return data; } /** * @param data the data to set */ public void setData(String[] data) { this.data = data; } }
Rows代码:
package com.javaeye.gzwfdy.vo; import java.util.List; public class Rows { private List rows; /** * @return the rows */ public List getRows() { return rows; } /** * @param rows the rows to set */ public void setRows(List rows) { this.rows = rows; } }
服务层接口代码IDhtmlxGridManager:
package com.javaeye.gzwfdy.service.interfaceManager; import java.util.List; import com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid; import com.javaeye.gzwfdy.exception.HandleException; public interface IDhtmlxGridManager { /** * 初始化表头 * @return * @throws HandleException */ public String getInitGridXML() throws HandleException; /** * json数据 * @return * @throws HandleException */ public String getJsonData() throws HandleException; /** * XML数据 * @return * @throws HandleException */ public String getXMLData() throws HandleException; /** * * <p> * Discription: * </p> * @author guozhw * @param dhtmlxgrid * @return * @throws HandleException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public boolean saveData(List<Dhtmlxgrid> dhtmlxgrid) throws HandleException; /** * * <p> * Discription: * </p> * @author guozhw * @return * @throws HandleException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public boolean deleteData(List<Dhtmlxgrid> dhtmlxgrid) throws HandleException; }
HandleException代码:
package com.javaeye.gzwfdy.exception; public class HandleException extends Exception { public HandleException() { super(); } public HandleException(String message) { super(message); } }
dao层接口代码:
package com.javaeye.gzwfdy.dao.hibernate; import java.util.List; import com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid; import com.javaeye.gzwfdy.exception.DAOException; public interface IDhtmlxGridDAO { /** * * <p> * Discription: 查询方法 * </p> * @author guozhw * @return * @throws DAOException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public List<Dhtmlxgrid> getData() throws DAOException; /** * * <p> * Discription: 保存 * </p> * @author guozhw * @param grid * @throws DAOException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public void saveData(Dhtmlxgrid grid) throws DAOException; /** * * <p> * Discription: 更新 * </p> * @author guozhw * @param grid * @throws DAOException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public void updateData(Dhtmlxgrid grid) throws DAOException; /** * * <p> * Discription: 删除 * </p> * @author guozhw * @param grid * @throws DAOException * @since * @update:[日期YYYY-MM-DD] [更改人姓名][变更描述] */ public void deleteData(Dhtmlxgrid grid) throws DAOException; }
dao接口实现类:
package com.javaeye.gzwfdy.dao.hibernate; import java.util.List; import org.springframework.dao.DataAccessException; import com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid; import com.javaeye.gzwfdy.exception.DAOException; import com.javaeye.gzwfdy.util.AbstractHbmBaseDao; public class DhtmlxGridDAOImpl extends AbstractHbmBaseDao implements IDhtmlxGridDAO { @SuppressWarnings("unchecked") public List<Dhtmlxgrid> getData() throws DAOException { return this.findAll(Dhtmlxgrid.class); } public void saveData(Dhtmlxgrid grid) throws DAOException { try { this.save(grid); } catch (DataAccessException e) { e.printStackTrace(); throw new DAOException(e.getMessage()); } } public void updateData(Dhtmlxgrid grid) throws DAOException { try { this.update(grid); } catch (DataAccessException e) { e.printStackTrace(); throw new DAOException(e.getMessage()); } } public void deleteData(Dhtmlxgrid grid) throws DAOException { try { this.delete(grid); } catch (DataAccessException e) { e.printStackTrace(); throw new DAOException(e.getMessage()); } } }
dao异常类:
package com.javaeye.gzwfdy.exception; public class DAOException extends Exception { public DAOException(String message) { super(message); } public DAOException() { super(); } }
到此后台代码都已经完成了。前台使用dwr远程调用这些方法。spring就不写出来。dwr.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd"> <dwr> <allow> <create creator="spring" javascript="dhtmlxGridManager" scope="request"> <param name="beanName" value="dhtmlxGridManager" /> <include method="getXMLData"/> <include method="saveData"/> <include method="getInitGridXML"/> <include method="deleteData"/> </create> <convert converter="bean" match="com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid" > </convert> </allow> <signatures> <![CDATA[ import java.util.List; import java.util.Map; import com.javaeye.gzwfdy.dao.hibernate.po.Dhtmlxgrid; dhtmlxGridManager.saveData(List<Dhtmlxgrid>); dhtmlxGridManager.deleteData(List<Dhtmlxgrid>); ]]> </signatures> </dwr>
jsp代码也不列出来了,增加操作对应的js方法为add(),删除操作对应js方法del(),保存save();jsp页面中body中加入onload="initGrid('<%=contextPath %>');"
String contextPath = request.getContextPath();
js代码如下:
/** * 页面初始化 */ //window.onload = initGrid; var mygrid; var path; // 初始化表格 function initGrid(contextPath) { path = contextPath; dhtmlxGridManager.getInitGridXML(function(xml) { mygrid = new dhtmlXGridObject('gridbox'); mygrid.setImagePath(contextPath + "/dhtmlxSuite/dhtmlxGrid/codebase/imgs/"); mygrid.init(); mygrid.parse(xml, loadData, "xml"); //mygrid.attachHeader("A,B,C",["text-align:right;","text-align:left;","text-align:center"],"ewrtwertrt"); //mygrid.adjustColumnSize(1); //mygrid.enableLightMouseNavigation(true); //mygrid.enableKeyboardSupport(true); //mygrid.lockRow(1, false); }); } function loadData() { dhtmlxGridManager.getXMLData(function(data) { mygrid.clearAll(); mygrid.parse(data); }); /** * dhtmlxGridManager.getJsonData(function(data) { mygrid.parse(eval('(' + data + ')'), "json"); }); */ } /** * 新增按钮处理 */ function add() { mygrid.addRow(mygrid.uid(), getAddRowString(), getRowIndex()); } function getRowIndex() { var selectedId = mygrid.getSelectedId(); var rowIndex; if (selectedId) { rowIndex = mygrid.getRowIndex(selectedId) + 1; } else { rowIndex = mygrid.getRowsNum(); } return rowIndex; } function getAddRowString() { return "0,,"; } /** * 保存按钮处理 */ function save() { var changedRowIds = getChangedRowIds(); if (changedRowIds && changedRowIds.length == 0) return; var dhtmlxgrid = buildObjects(changedRowIds); dhtmlxGridManager.saveData(dhtmlxgrid, function callback(data) { if (data) { alert("保存成功!"); } else { alert("保存失败!"); } loadData(); changedRowIds = new Array(); }); } /** * 获取表格所有改变过的行编号 */ function getChangedRowIds() { var changedRowIds = new Array(); var allRowIds = mygrid.getAllItemIds().split(","); for (var i = 0; i < mygrid.getRowsNum(); i++) { for (var j = 0; j < mygrid.getColumnCount(); j++) { if (mygrid.cells(allRowIds[i], j).wasChanged() && !changedRowIds.IsInclude(allRowIds[i])) { changedRowIds[changedRowIds.length] = allRowIds[i]; break; } } } return changedRowIds; } function buildObjects(changedRowIds) { var dhtmlxgrid = new Array(); for (var i = 0; i < changedRowIds.length; i++) { var rowId = changedRowIds[i]; dhtmlxgrid[dhtmlxgrid.length] = buildObject(rowId); } return dhtmlxgrid; } function buildObject(rowId) { return { id: mygrid.cells(rowId, mygrid.getColumnCount() - 1).getValue(), message: mygrid.cells(rowId, 1).getValue(), infosrc: mygrid.cells(rowId, 2).getValue() }; } //----------------------- function getValue(value) { return value == null || value == 'null' ? "" : value; } Array.prototype.IsInclude = function(value) { for (var i = 0; i < this.length; i++) { var element = this[i]; if (element == value) { return true; } } return false; } //--------------- /** * 删除按钮处理 */ function del() { var checkedRowIds = getCheckedRowIds(); if (checkedRowIds && checkedRowIds.length > 0) { if (confirm("请确认是否删除所选记录?")) { var deletegrid = buildObjects(checkedRowIds); dhtmlxGridManager.deleteData(deletegrid, function callback(data) { if (data) { alert("删除成功!"); } else { alert("删除失败!"); } loadData(); checkedRowIds = new Array(); }); } } else { alert("请选中删除记录!"); } } function getCheckedRowIds() { var checkedRowIds = new Array(); var allRowIds = mygrid.getAllItemIds().split(","); if (allRowIds) { for (var i = 0; i < allRowIds.length; i++) { if (mygrid.cells(allRowIds[i], 0).getValue() == 1) { checkedRowIds[checkedRowIds.length] = allRowIds[i]; } } } return checkedRowIds; }
评论
3 楼
fxiaozj
2012-08-31
不知道能不能把JSON写一个通用的,要不然每个entity都得写一个JSON进行转换。
2 楼
mfkwfc
2012-05-28
为什么没看到json数据的格式呢?
1 楼
exindedan
2011-07-22
非常不错的教程,写得也很详细!
希望能附上源代码!
赞一个!
希望能附上源代码!
赞一个!
相关推荐
封装Ext.grid.Grid+dwr实现增删该查
一个利用DWR的简单应用实例,可以实现增删改查,全部数据存内存列表中,暂不用任何数据库支持,直接部署应用即可使用,方便易用...主要用于DWR初学者体验下DWR在页面的使用和配置方法.
Struts中的Dwr基础增删改查,可以借鉴学习下
采用SSH+ajax(DWR)实现增删改查+分页的功能!!含有数据库!可以直接运行!
我也是初学3个框架的整合,希望多多指教!
一个牛逼的老师给的,很简答的例子,非常适合刚接触DWR的人,正常智商情况下都能看明白的,看过之后保证基本会用dwr,稍加熟悉就能完美使用!
绝对不会让你后悔的,此为自己练习时做的项目,综合了标题所述的技术
该项目通过一键完成:自动生成指定表的增删改查功能(是用ajax完成的哦) 无刷新的。 使用的是jsp+jquery+struts2+dwr+hibernate+freemarker 下载后导入到myeclipse中部署到tomcat6上即可。 注意先按照方法初始化...
主要特色: (1)s2sh实现的增删改查 (2)jquery validator验证框架验证表单 (3)dwr和s2sh整合验证名称是否相同 (4)分页组件分装的更精简 (5)过滤器,拦截器的编写
SSH+DWR+EXT 增删改查,对于初学者很有帮助哦!
建立Oracle数据库和tomcat等环境,自己修改一下用户名...有多层嵌套,因为是当时练手的,所以很简单的例子(不排除里面有些垃圾代码),对增删改查实现了弹出框(煤炭基建)和可编辑表格(电源基建)也有后台分页功能。
JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源代码 dwr.jar 2.0JavaEE源...
这个是一个ssh+ajax的增删改查实例,很适合刚入门的程序员,在项目中发展肯定要比你整天坐着看书好,希望会对大家有用
SSH2项目,内含增删改查,带上传图片(带预览),有分页。有登陆。 基于MyEclipse8.5+MySQL+Tomcat6.0 struts2+spring2.5+hibernate3.2做的还有登陆DWR校验 导入项目后,会报错,导入jar包即可。 struts2+spring2.5+...
Spring+Hibernate+Ext+dwr做的一个简单的grid的增删改查,面板布局, 通过autoload方式载入grid ,以及XML树的建立 ,连接MySql数据库 。JS文件代码在Demo文件夹下,JAVA代码在src下。适合新手
ajax实现登陆二级联动增删改查
在Struts 2.0中使用DWR实现AJAX表单校验。提供完整的实例源码!
Dwr 最简单 例子 (2.0) Dwr 最简单 例子 (2.0) Dwr 最简单 例子 (2.0)
struts2框架 spring框架 DWR框架 Ext框架 Mybatis框架 mysql数据库脚本 实现增删改查
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器...