服务器可以按照普通的request方法来读取客户端POST方法提交的数据。 在JSP环境中,可以通过request.Get ParameterNames()获得客户端传送给服务器的所有参数的名字,所有参数的名字存放在一个Enumeration对象中,通过遍历这个对象中的各个参数的名字可以进一步得到这个参数名字的值,进而生成键与值对应关系。
得到参数名称—参数值的映射关系后,可以把这种映射关系封装为JSON对象,JSON.simple类(http://www.JSON.org/ java/json_simple.zip)扩展自java.util.HashMap,可以完成这个功能,然后把生成的JSON对象存入到数据库中,以备恢复表单时使用。需要恢复表单时,首先从数据库中选取出保存的JSON对象,然后通过out.print()方法把这个序列化好的对象发送给客户端。以下为服务器端组装JSON对象的核心代码:
JSONObject obj=new JSONObject();
Enumeration e = request.getParameterNames();
for (; e.hasMoreElements();) {
String e_name = (String) e.nextElement();
String e_value= request.getParameter(item_name);
e_value=java.net.URLDecoder.decode(e_value, “UTF-8″);
obj.put(e_name,e_value);
}
3.3 客户端恢复表单数据
客户端通过AJAX异步接收到服务器发送来的JSON对象后,可以通过for(…in…)方法来解析出JSON对象中的各个元素,进一步,根据JSON_Object[元素名]方法可以取得该元素名的值,然后使用解析出的元素名称—元素值,即键—值映射关系,应用DOM树恢复出页面中的表单数据。由于HTML页面中,表单的ID特性是唯一的,即没有两个表单元素共享同一个ID,这是客户端从DOM树中获取指定表单的最快方法,所以在客户端使用getElementById()来恢复表单。
为了减少传输的数据量,客户端POST的数据中非空表单信息,所以表单进行恢复时,只对这部分表单进行恢复即可。由于表单类型不同,恢复方法也不同,例如对Text Field表单要重新设定值,而Radio Button表单只要重新使其处于选中状态即可,所以要制定不同的恢复策略来恢复原表单内容。下面为表单恢复时的关键代码:var json_obj=loader.responseText.parseJSON();
for (var o in json_obj){
sRestoreFormItem(form_obj,o,json_obj[o])
}
/*函数说明见*/
4 结束语在客户端可以使用JavaScript定时每隔一段时间调用formToRequestString()方法,然后把数据POST到服务器端,即可实现表单数据的定时保存。在服务器端把JSON.simple生成的JSON对象进行编号,然后存入数据库,根据用户端的请求,恢复指定编号的JSON对象,便可实现表单的“撤销”、“重做”功能,大大扩展了表单的表达能力。
参考文献[1] Nicholas C.Zakas著,曹力 张欣等欣. JavaScript高级程序设计[M].北京:人民邮电出版社,2006年11月第1版:148-150,289-318
[2] 池雅庆 周珺 岳元媛著.JSP项目开发实践[M].北京:中国铁道出版社,2006年11月第1版:25-26
[3] Herbert Schildt著,周志彬 吕建宁等译.Java2参考大全(第五版) [M].北京:电子工业出版社,2003年1月第1版:310-313,326-330
[4] Introducing JSON.http://www.json.org/
[5] Fang Yidong.Simple Java toolkit for JSON (JSON. simple)
收稿日期:9月3日 修返日期:9月15日
作者简介:徐连荣(1980-),男,山东临清人,助教,硕士研究生,主要研究领域为数字媒体技术、知识管理;张景生(1962-),男,教授,硕士研究生导师,主要研究领域为教育技术理论、计算机教育应用。