dhtmlxgrid 2.0 标准版 dwr实现增、删、改、查

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>标签之间的文字是就是列标题

[b]column[/b] 可用的属性有:

[*][i]width[/i] - 宽,单位是像素

[*][i]type[/i] - 列的类型

[*][i]align[/i] - 单元格文本对齐方式

[*][i]color[/i] - 列背景颜色

[*][i]sort[/i] - 排序类型

[*][i]id[/i] - 列id,可选

[*][i]hidden[/i] -这个是专业版的属性,标准版不能使用。
设置列宽的单位是%,不设置默认是像素px。

<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中加入οnlοad="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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值