浏览 4770 次
锁定老帖子 主题:如何让JSON穿梭在服务器于浏览器之间
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-02
最后修改:2009-04-08
一个新的轮子,现在网络上充斥这一大堆的轮子.我也做了一个.一半是研究,一半是想做给自己用 目前实现的功能 1 JSON转换成java对象(按一定的规则提交) 什么意思呢,就是你能够将你在浏览其中提交的JSON直接转换成一个java对象供应用程序调用 2 java对象转换成JSON 可以将servlet中的java对象转换成一个JSON对象给浏览器中的js调用,而如果在浏览器中调用这个JSON的一些于java对象中的同名方法.那么调用的其实就是java对象的方法,那么就相当于你在servlet中调用了这个java对象的方法. 举个简单的例子: java对象的定义代码 public class testObject { String prot1; String showProt1() { //在控制台输出prot1的值 System.out.println(prot1); //返回prot1的值 return prot1; } void setProt1(String prot1) { this.prot1 = prot1; } void String getProt1() { return prot1; } } 实例化java对象并将其提供给浏览器获取的java代码 //实例化对象 testObject to = new testObject(); //提供对象给浏览器调用 //第一个参数为浏览器中获取java对象对应的JSON对象的别名 //意思就是在浏览器里可以通过$ha.getObject("testObject")来获得to对象的JSON代码 this.putReturnObject("testObject",to); 通过上面的简单代码你就可以通过以下的语句来采用hocate框架获得testObject对象的实例to的JSON映射 js代码: //获取服务器中的testObject对象 var JSTO = $ha.getObject("testObject"); alert(JSTO.getProt1()); JSTO.showProt1(); 接着你可以通过调用JSTO.prot1来获取java对象中prot1中的值 也可以通过JSTO.getProt1();来获得, 使用JSTO.showProt1()接着你会看到你的servlet的控制台会有prot1的值的输出,实际上是在你的servlet中调用了对象testObject的showProt1方法. 那么就实现了在脚本中编写对java对象的操作的代码和在java程序里编写对java对象操作的代码相同的目的 3 浏览器中的简单引用 实际应用中不需要想DWR或者其他框架那样引用一个java对象的js脚本,而是你在servlet中配置好相应的要为浏览器提供的java对象, 就可以通过$ha.getObject来完成对象的获取.并可以直接使用和java对象相同名称的方法,总的来说编码的过程中是不需要引用特定脚本的. 4 对属性的绑定. 在使用的过程中你可以通过为任意Form标签或者Form内的可输入标签增加bind属性将这些标签中的值绑定到相应的JSON对象上. 例如你有一个登陆form,需要提供username,password两个参数 那么你可以使用为form标签增加bind属性将其绑定到一个特定的JSON对象上 或者为form中的<input>标签增加bind属性将其绑定到一个特定的JSON对象的一个特定的属性上 例子: 登陆java对象的定义 public class loginData { String username; String password两个参数; //省略若干set/get方法...... } 实例化java对象并将其提供给浏览器获取的java代码 //实例化对象 loginData ld = new loginData(); //提供对象给浏览器调用 //第一个参数为浏览器中获取java对象对应的JSON对象的别名 //意思就是在浏览器里可以通过$ha.getObject("loginData")来获得ld对象的JSON代码 this.putReturnObject("loginData",ld); 如果你的这个JSON对象是通过$ha.getObject获得的那么你就可以在页面中通过bind属性的自动绑定够能修改这个 JSON中的数据,而将这个JSON提交到servlet中的时候就会相应的修改servlet中的java对象的值.你所要做的就是 1.$ha.getObject获取对象 2.然后绑定值 3.然后将这个JSON提交出去. js代码获得一个java对象loginData的JSON实例 var loginData = $ha.getObject("loginData"); 页面代码 <form bind="loginData"> <input id="username" type="text"> <input id="password" type="password"> </form> <script> $ha.putObject("userinfo",loginData); </script> //在Servlet中 loginData ld = this.parameters.get("userinfo"); 那么实际使用中当用户在id为username的input元素上输入数据的时候会相应的修改JSON对象loginData中username中的数据 那么在登陆的时候就可以直接发送loginData这个JSON对象给服务器,那么在服务器中你就可以获得一个实例化好的loginData的java对象 通过 5 自动验证体系 对EMail.数字.等等的自动验证 <input name="text2" type="text" id="validate" datatype="Email" autovalidate="true" /> 通过增加datatype属性和autovalidate属性 那么在提供$hv.error和$hv.correct的callback函数可以自动的验证客户的输入是否合法 这两个回调函数都回传入一个参数,那个就是被验证对象的ID属性 //验证函数 $hv.error = function(v1) { alert(v1+"中的参数不正确!"); } $hv.correct = function(v1) { alert(v1+"中的参数正确!"); } 当用户输入的数据为合法的Email字符串的时候,就会调用$hv.correct中的回调函数,接着弹出一个提示框显示提示. 当用户输入的数据为非法的Email字符串的时候,就会调用$hv.error中的回调函数,接着弹出一个提示框显示提示. 而你也可以通过$hv.validated('validate')的方法来手工验证数据. 6 JSON对象的调用验证 这里所说的JSON对象是指你用servlet中获得的java对象的一个JSON映射 例子请参照(2)中的那个例子. 由于java对参数的要求是很严格的.所以参数类型必须符合定义中的规范 而通过JSON提交上去的参数如何验证呢? hocate ajax框架提供了客户端的验证能力 1 验证参数类型是否正确 2 验证参数个数是否正确 例如(2)中的例子 调用JSTO.setProt1(...)方法 如果你提供里一个JSTO.setProt1()无参数调用,那么在验证参数个数的时候就会在浏览器中报错,因为这个方法是需要一个String作为参数的 如果你提供JSTO.setProt1(Object)调用就会验证你的这个Object是否是String类型如果不是会报错. 7 为参数提供对象支持 例如有个从服务器获取的JSON对象test有一个方法setObject(testObject kkk),其中testObject是一个我们自己定义的java类. 那么如何提交调用这个方法呢,在java中他传入的是一个java对象啊. 我们可以通过var to = $hv.getObject('testObject');来获得一个testObject对象在浏览器中的JSON映射,接着我们用js为其填 入相应的值. 最后在调用方法的时候test.setObject (to);就可以将这个to对象提交到servlet中,servlet会自动把它转换成一个java的testObject对象供编程使用 不知道这个轮子大家满意不.我只是针对自己的使用习惯做了相应的功能开发. 大家提提意见 演示地址:http://www.hocate.org/ajaxdemo 代码和引用的包请到svn://www.hocate.org/hocate/中checkout /src/ajax-js中是需要引用的js库 /hocate.jar是需要在java项目中引用的java包 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-10
感觉看着不方便重新排了下版.
feature: 1.服务器推数据的实现 2.对Ext的tree和gird等复杂数据显示组件的数据支持 3.对框架中js代码的优化和后端java代码的扩展 4.提高JSON和java相互对象转换引擎的效率 |
|
返回顶楼 | |
发表时间:2008-04-08
helyho 写道 什么意思呢,就是你能够将你在浏览其中提交的JSON直接转换成一个java对象供应用程序调用
这个是如何实现的了,很想知道。。。 我做过将json 格式的数据转换成Java对象。。但是是比较繁琐的。。而且不同的json格式的数据要单独做不同的处理来转换。。很繁琐的呀。 你的这个是如何实现的了,很想知道。。。 |
|
返回顶楼 | |
发表时间:2008-04-08
xuyongping 写道 helyho 写道 什么意思呢,就是你能够将你在浏览其中提交的JSON直接转换成一个java对象供应用程序调用
这个是如何实现的了,很想知道。。。 我做过将json 格式的数据转换成Java对象。。但是是比较繁琐的。。而且不同的json格式的数据要单独做不同的处理来转换。。很繁琐的呀。 你的这个是如何实现的了,很想知道。。。 有什么中间件可以用吗? |
|
返回顶楼 | |
发表时间:2008-04-08
现在真的很想了解hocate 框架了,真是受益匪浅那。。。谢谢。。。
|
|
返回顶楼 | |
发表时间:2008-04-08
DWR不也是用javascript调用远程的java方法吗,不知道有什么不同
|
|
返回顶楼 | |
发表时间:2008-04-09
和DWR比其来有很大不同
dwr的调用时采用了OLE的方式,及dwr.call(object,method,params)等类似的方式。 在这里采用了object.method(param1,parm2,.....)的方式,模拟了在java中队某个对象的调用方法 还有一个点就是,如果被调用的方法的参数是一个自定义的复杂对象,那么也可以通过这种方式传递给服务器 并且服务器接收到的是一个java对象。 |
|
返回顶楼 | |
发表时间:2008-04-09
没有使用任何中间件,全部代码都是我们自己设计并完成的。
希望大家喜欢。 近期会发布一个新的版本,对线程安全和效率做较大提高的版本 并听过更多的方法 |
|
返回顶楼 | |