最近的项目需要用到dhtmlxconnector这个组件,但网络上的文章的确少的可怜,他的connector很好用,可以实现客户端的ajax,并能同gird,tree,comb等组件连用,遗憾的事例子中没有中文操作,在这里我介绍一种可以操作中文的方法:
我使用的是java版的,在网站上可以下载到相关的例子,在下载到得dhtmlxconnectorjava文件下可以看到samples文件夹里面有一个war包,这个就是源代码了,哈哈。
我以grid下的第一个例子为例说明中文的配置过程。
这个数据库默认是使用mysql的,在mysql下建立数据库,然后将dump.sql导入,便可以实现数据源了,如果是自己的服务器最好把数据源配置为gb2312或者gbk了,但如果是网络租借的服务器就只能把数据库配成lant1了,但可以把表设置为gb2312模式,字段就可以存中文了。
数据库配置好之后我们就来看看编码的引入吧,首先我们介绍一下思路,页面中输入的数据请求后编码是iso8859-1模式,而我们可以将数据统一按utf-8模式操作。这个过程需要两步的转码:
第一步就是:页面上送出的数据,发送到处理页之后的转码 iso-8859-1->utf-8
第二步就是:处理后的数据写入数据库需要的转码 以utf-8模式连接数据库
好了说了这么多,开始操作吧:
我们来了解grid文件夹下的01_basic.html文件,这个文件提供了视图界面,他引入了grid组件,愿意的话可以加上
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 这个头。
这个文件中有两句很重要
mygrid.loadXML("01_basic_connector.do");
var dp = new dataProcessor("01_basic_connector.do");
dp.init(mygrid);
可以看到01_basic_connector.do是数据的提供者也是数据的操作者,那我们就来看看这个文件吧。查看web.xml文件,发现这个文件实际是Grid_01_BasicConnector.java,就在src下面。
通过追踪文件我们可以看到,数据在请求时封装到DataAction中,而这个过程是自动完成的,所以我们需要在数据发送时截获这个数据并将数据转码,通过查找api我们可以找到beforeUpdate方法,这个方法提供了在更新之前所做的操作,因此我定义了一个类
import java.io.UnsupportedEncodingException;
import com.dhtmlx.connector.ConnectorBehavior;
import com.dhtmlx.connector.DataAction;
import com.dhtmlx.connector.GridConnector;
public class Grid_01_updateBehavior extends ConnectorBehavior {
public void beforeUpdate(DataAction data) {
try {
String s=data.get_value("item_cd");
String strn=new String(s.getBytes("ISO-8859-1"), "UTF-8");
System.out.print(strn);
data.set_value("item_cd", strn);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//data.set_value("item_cd", "测试");
}
}
这段程序内容很简单,就是获得item_cd字段的值,并转化为utf-8模式。
我们还需要在Grid_01_BasicConnector.java这个文件中加一句c.event.attach(new Grid_01_updateBehavior());
Grid_01_BasicConnector.java文件内容变为
import java.sql.Connection;
import java.util.HashMap;
import com.dhtmlx.connector.ConnectorServlet;
import com.dhtmlx.connector.GridConnector;
// TODO: Auto-generated Javadoc
/**
* The Class BasicConnector.
*/
public class Grid_01_BasicConnector extends ConnectorServlet {
/* (non-Javadoc)
* @see com.dhtmlx.connector.ConnectorServlet#configure()
*/
@Override
protected void configure() {
Connection conn= ( new DataBaseConnection()).getConnection();
GridConnector c = new GridConnector(conn);
c.dynamic_loading(100);
c.event.attach(new Grid_01_updateBehavior());
c.render_table("grid50000", "item_id", "item_nm,item_cd");
}
}
到这里,我们的第一步就做好了,第二步还是比较简单的,我们只需找到数据的链接代码,并加入链接方式就可以了。
DataBaseConnection.java为我们提供了数据的链接,所以我们改变里面代码为
import java.sql.Connection;
import java.sql.DriverManager;
public class DataBaseConnection {
Connection getConnection(){
Connection conn=null;
try {
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection("jdbc:mysql://localhost/dhtmlx_DB?characterEncoding=UTF-8", "root", "");
} catch (Throwable e) {
e.printStackTrace();
}
return conn;
}
}
当然我的前提是数据库名称为dhtmlx_db,用户名为root,密码没有设置。
到这里我们就大功告成了,重新加载页面,可以看到当在01_basic.html中输入中文的时候依然可以直接存入数据库。