该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-23
只使用spring再加上一种orm,两者之间用json交换数据就可以了,现在是放弃 jsp,struts这些已经显得累赘的技术的时候了。 出于这种想法,我做了个小试验,其中之所以选择jquery 1.3.2是因为jquery ui 1.8还不是稳定版,而稳定版1.7是基于jquery 1.3+的。 1. 先从前台提交数据开始,关键代码如下: function save() { var elemUserinfo = $('#customerInfo'); var userinfo = elemUserinfo.serializeObject(); var jsonuserinfo = JSON.stringify(userinfo); jQuery.ajax({ type : 'POST', contentType : 'application/json', url : 'customerInfo/new.do', data : jsonuserinfo, dataType : 'json', success : function(data){ $('div#responseName').text(data.name); $('div#responseAddr').text(data.addr); }, error : failed }); } 其中customerInfo是一个form的id,该form包含两个text input,name分别为name和addr, serializeObject是一个网上比较流行的将form数据组装成json对象的juery扩展,代码如下: $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name]) { if (!o[this.name].push) { o[this.name] = [ o[this.name] ]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; 将json对象转成String是用的json2(http://www.json.org/js.html)的JSON.stringify,提交 是用的jquery的ajax功能,注意要把contentType设为'application/json',这是为了后台spring 将其自动转化为vo对象用的。 关于返回值后面再说。 2. 然后说说后台spring的接收。 后台主要的代码如下: @Controller @RequestMapping("/customerInfo") public class CustomerInfoController { @RequestMapping(value="/new", method = RequestMethod.POST) @ResponseBody public Customer newCustomer(@RequestBody Customer customer) { customer.setName(customer.getName() + "经服务器修改"); customer.setAddr(customer.getAddr() + "经服务器修改"); return customer; } } 其中Controller,RequestMapping什么的就不多说了,简单的说就是前提交时指定的url( customerInfo/new.do)就被spring转到这里来处理了,其中web.xml中spring的设置如下: <servlet> <servlet-name>test</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 注意处理申请的函数的参数直接就是Customer对象(Customer是一个具有属性name和addr的vo), 而不是json字串,这里的关键是这样的,spring具有将数据转化后再交给controller的功能,spring 3 新增了对json的处理能力,是基于Jackson JSON Processor(http://jackson.codehaus.org/)的, 使用时要配置一下,在这个例子中默认的bean定义文件test-servlet.xml中这样写: <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <util:list id="beanList"> <ref bean="mappingJacksonHttpMessageConverter" /> </util:list> </property> </bean> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 这样一来,spring在接收contentType为application/json的request时会自动将json字串间转换成期望 的java对象,同样,发送response时,contentType被设为application/json,并且将java对象转为json 字串。 3. 下面该说返回了 上面已经说到,spring自动将response进行json化,所以处理函数直接返回vo对象就可以了。 而在页面端,由于我们指定了dataType为json,所以jquery直接把接收到的json字串转成了javascript 对象,我们可以直接使用data.name的写法取得数据了。 简单吧,这样一来,开发中,可以由设计人员在需求分析的基础上专心用html制作页面,之后交到前端 开发人员手里,前端开发人员添加js代码,实现页面逻辑,后台人员专心于java,spring和orm,前后 端交换json数据就可以了。 欢迎拍砖啊,呵呵。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-23
认真看了一遍代码 写起来确实很过瘾啊...
serializeObject没接触过...不过楼主说的意思明白了 不过前端开发人员写js我估计没戏..至少我们公司没戏.. |
|
返回顶楼 | |
发表时间:2010-04-23
过去使用el表达式设值
现在用json 难道数据过来以后 需要 先解析json 然后对应的 用$()取到以后 修改值么? 那这个工作量是不是打了点 还是说有其他一些好的方法 |
|
返回顶楼 | |
发表时间:2010-04-23
Angel_Night 写道 过去使用el表达式设值
现在用json 难道数据过来以后 需要 先解析json 然后对应的 用$()取到以后 修改值么? 那这个工作量是不是打了点 还是说有其他一些好的方法 应该可以写一个通用函数,将json对象的各个属性赋值到html的元素上,说不定已经有这样的东西了呢 |
|
返回顶楼 | |
发表时间:2010-04-23
jsp 还是需要的吧,orm 也还是需要的。。。
|
|
返回顶楼 | |
发表时间:2010-04-23
yiyu 写道 Angel_Night 写道 过去使用el表达式设值
现在用json 难道数据过来以后 需要 先解析json 然后对应的 用$()取到以后 修改值么? 那这个工作量是不是打了点 还是说有其他一些好的方法 应该可以写一个通用函数,将json对象的各个属性赋值到html的元素上,说不定已经有这样的东西了呢 通用函数并非对所有业务通用,例如:除非是开发的系统所有业务都涉及到企业信息,这样可以用一个通用的函数直接就赋值了,但是对于其他系统各业务模块并非这样,所以还是有大量的赋值工作需要去做,反正我是没找到好的方法。 |
|
返回顶楼 | |
发表时间:2010-04-23
最后修改:2010-04-23
json-lib、xstream可以处理json和javabean的转换
但是不依赖于第三方的jar包,struts已经可以处理javabean和前端html dom元素值的转换了,当然js处理json非常方便,也就是说可以不用json就能转,struts也可以直接返回json流 限制我们在项目中大量使用DWR,所以对于struts的使用量已经大大减少了,比如在上传下载时使用 spring3的特性研究中。 |
|
返回顶楼 | |
发表时间:2010-04-24
lz的想法是不错 不过实现起来吗很难
|
|
返回顶楼 | |
发表时间:2010-04-24
实实在在地感受到了轻量级的开发。。。确实是爽。
在构建并发用户数量较高的系统时,Json + Spring + ORM还是可行的。最起码丢弃了相对较笨的Struts之类的框架。 |
|
返回顶楼 | |
发表时间:2010-04-24
一般般,不一定要spring系列。
|
|
返回顶楼 | |