借助mootools 快速开发一个重用 ajax 提交方式

本文介绍了一种使用Mootools和Apache Commons BeanUtils库简化Web程序Ajax提交到Java对象映射的过程,减少了手动赋值的步骤,提高了代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
做web 程序的你,是不是经常会遇到url提交, 请求呢.
 
之间会不会遇到 很多需要修改页面表单域和后台po的对应呢.
 
你是不是想使用java 语法的方式.来写ajax 提交. 并且实现js 对象到 java 对象的一站式映射呢
 
例如:
 
js 对象: data 包含(field1,field2,field3....)
 
java 对象 po 也包含 field1,field2,field3.....
 
这两个对象属性不一定完全一致, 但是你希望他们一致的地方能直接通过ajax 请求到servlet时,直接自动转换,
 
不需要人为的去
request.getparameter("field1")
 然后一个一个的去赋值.
 
那么利用mootools 你可以很灵巧的扩展出你自己所需求的js 类库
 
声明: 本文没有什么创新,没有什么深奥的技术, 有的只是一颗追求简单的心. 如果你也想把你代码从10行缩短到5行,
 
那么你可以试试.
 
[list][*]首要工作:
[/list] 
1. js 用上了mootools
2. java后台用上了org.apache.commons.beanutils 包
 
那么现在开始吧:
 
[list][*]第一步:
[/list] 
定制自己的servlet 提交类库
 
servlet = new class({			data : {},			responsecall : null,			initialize : function(forward) {				if(forward){					this.data.forward = forward;//这个forward用来转发,如果你的单个servlet就                                //一个业务的话,这里留空就行                                 }				this.data.random = math.random();//这里用了随机数,其实加不加都行			},			submit : function(url) {				var _responsecall = this.responsecall;				new request.json({							url : url,							oncomplete : function(responsejson, text) {								if (responsejson.status == "fail") {									alert(responsejson.message);									return;								}								if (_responsecall) {//如果设置了提交成功的回调									_responsecall(responsejson, text);								}							},							failure : function() {								alert("error post servlet : " + url);							}						}).post(this.data);			}		});
 <br>你是不是发现没有 field1=**&field2=*&field3=... 这种提交方式,那是用了mootools 的json提交 , mootools 类库比不上jquery丰富 但是它在定制自己的js扩展框架那块, 确实jquery比不上的.因为他的语法借鉴的就是java 的oo思想
[list][*]第二步:
[/list] 
开始利用自己写的servlet ajax类库来封装数据
 
var sv = new servlet("add");//forward转发,如果servlet 没有其他业务则留空		sv.data.elementid1= $('elementid1').value;		sv.data.elementid2= $('elementid2').value;		sv.data.elementid3= $('elementid3').value;                sv.data.***** = ....... // 灵活的对象赋值方式 		sv.responsecall = addinvresponse;		sv.submit(url);						function addinvresponse(json,text){			alert("添加成功");		}
 
是不是特别像java 的对象声明语法啊.  呵呵, 好戏在后面.
 
[list][*]第三步:
[/list] 
这里就到java servlet 了. 看看如何封装js提交的数据的.
 
首先:
request.getparameter("forward")
 你是不是设置了转发
如果设置了
 
if (forward.equals("add")) {			addclass(request, response);		}
 那好:  看addclass方法
myclass inv = new myclass();		inv = (myclass) parserequestutils.parserequest(request, inv);//数据封装
 哦哈? 难道这个inv 对象就包含了. js 中设置 field1 ,field2 ,field3的值了么?
是滴, 你懂得
 
 
那么来看看 这个parserequestutils.parserequest又是何方神圣.
 
public static object parserequest(httpservletrequest request, object bean) {		// 取得所有参数列表		enumeration enumobj = request.getparameternames();		// 遍历所有参数列表		while (enumobj.hasmoreelements()) {			object obj = enumobj.nextelement();			try {				// 取得这个参数在bean中的数据类开				class cls = propertyutils.getpropertytype(bean, obj.tostring());				if(cls==null){					continue;				}				// 把相应的数据转换成对应的数据类型				object beanvalue = convertutils.convert(request						.getparameter(obj.tostring()), cls);				// 添冲bean值				propertyutils.setproperty(bean, obj.tostring(), beanvalue);			} catch (illegalaccessexception e) {				// todo auto-generated catch block				e.printstacktrace();			} catch (invocationtargetexception e) {				// todo auto-generated catch block				e.printstacktrace();			} catch (nosuchmethodexception e) {				// todo auto-generated catch block				e.printstacktrace();			}		}		return bean;	}
 
哦, 到这里算是看明白了. 不就是把提交的request请求的参数一个个对应类型放入java 对象了中了么.
 
是滴.是这样的. 如果你们有更简单的方法,望赐教!
 
[list][*]第四步:
[/list]还等啥? 操作吧
 
service.insertmyclass(inv);
 
备注: 
 
[size=xx-small;]回头你们可以试试 在js 中随意的增删几个参数, java对象就会改变, 是不是少写很多代码啊.[/size]
[size=xx-small;]<br>[/size]
[size=xx-small;]这个servlet js类库 , 只能操作一般的基于页面表单方式的提交或者请求 , 暂时没有做文件上传, 不过大家扩展的话,应该不是难题. [/size]
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值