`

使用json取代传统的form提交

阅读更多

        传统的html提交在处理复杂对象的编辑时显得力不从心,结构性的数据在经过后台jsp或者asp处理,展示为前台的html表单后,成为平面型的form的input,这样,当form提交到后台,服务不得不重新将平面型的构造为结构性数据,以进行后续的处理。
         在采用O/R mapping的应用中,这样的展示方式成为开发工作的瓶颈。
        WebRPC能够实现结构化数据在B/S之间的双向序列化,主流的实现如DWR,jsonRPC都提供了java对象——js对象之间的双向序列化。
    本文以jsonRPC与Ext2.0结合,通过以下步骤验证了用结构化数据取代传统form形式的可行性。

  1. 将多个java对象序列化到Browser的js对象(json格式)
  2. 将json格式的js对象与Ext form进行绑定
  3. Ext界面组件负责交互,编辑数据
  4. 编辑结果更新到js对象
  5. js对象提交到后台,反序列化为java对象


关键代码如下:
1.java对象序列化为json格式

java 代码
 
  1. static public String format(Object o) throws Exception{  
  2.     JSONSerializer ser = new JSONSerializer();  
  3.     ser.registerDefaultSerializers();  
  4.     SerializerState state = new SerializerState();  
  5.     JSONRPCResult result = new JSONRPCResult(JSONRPCResult.CODE_SUCCESS,  
  6.                    new Integer(1), ser.marshall(state, o));  
  7.     return result.toString();  
  8. }  

2.json格式到Browser后,调用eval,形成js对象

js 代码
 
  1. var jo;  
  2.  try {  
  3.  eval('jo = <%=dt.format(dt.getDefaultObjs()) %>');  
  4.  } catch(e) {  
  5.  throw new JSONRpcClient.Exception(550, "error parsing result");  
  6.  }  

3.js对象与Ext组件绑定

js 代码
 
  1. function jsonload(fm, m){  
  2.     fm.obj = m;  
  3.     for(x in m){  
  4.         var fld = fm.find('name',x);  
  5.         if(fld.length==1)  
  6.           fld[0].setValue(m[x]);  
  7.     }     
  8. }  

4.Ext组件编辑结果更新

js 代码
 
  1. function jsonupdate(fm){  
  2.     if(!fm.obj) return;  
  3.     var m=fm.obj;  
  4.     for(x in m){  
  5.         var fld = fm.find('name',x);  
  6.         if(fld.length==1)  
  7.           m[x]=fld[0].getValue();  
  8.     }  
  9. }  


5.js对象序列化为json字符串,并提交

js 代码
 
  1. var jostr = toJSON(jo);  
  2. var el = Ext.getDom("jostr");  
  3. el.value=jostr;  
  4. var fm = Ext.getDom("fm1");  
  5. fm.submit();  

6.json字符串反序列化为java对象

java 代码
 
  1. static public Object parse(String s) throws Exception{  
  2.     JSONObject jo =  new JSONObject(s);  
  3.     JSONSerializer ser = new JSONSerializer();  
  4.     ser.registerDefaultSerializers();  
  5.     SerializerState state = new SerializerState();  
  6.     Object result= ser.unmarshall(state, null, jo.get("result"));  
  7.     return result;  
  8. }  

页面是修改Ext2.0范例 examples\form\dynamic.html形成的,只保留了其中的tab-form示例用于多个对象的编辑
涉及的jsonRPC、Ext库(2.0)请自行下载

  • 描述: 界面效果
  • 大小: 12.7 KB
  • 16b.rar (19.3 KB)
  • 描述: 相关文件
  • 下载次数: 681
分享到:
评论
2 楼 chen4w 2007-11-29  
已经实现了,增加到该贴子的附件中了。
从服务器下载整个文件夹当然是可以实现的,可以将文件夹压缩之后形成一个单一文件,走标准的http请求,但是考虑到周期比较长,应提供进度显示
1 楼 tigershuang 2007-11-28  
楼主你好,
拜读过你的“用Ext编写的远程文件管理 ”帖子,感觉效果相当好。

不过你也提到:
远程文件选择(单选,待实现)
远程目录选择(单选,待实现)

不知道楼主实现了没有。

还有,有没有可能实现从服务器下载整个文件夹?如果可能能否赐教,谢谢!

相关推荐

    JQuery AJAX跨域提交参数、接收json数据.docx

    使用 `Request.Form` 可以获取提交的表单数据,该方法可以获取到所有的表单数据,包括文本框、下拉框、复选框等。 2. 通过映射到控制器参数方式 使用控制器参数可以将提交的数据直接映射到控制器的参数中,该方法...

    ajaxFileUpload_Struts2_json

    它通过AJAX(Asynchronous JavaScript and XML)技术实现,尽管现在大多数情况下,XML已经被JSON所取代,因为JSON更轻量级且易于处理。 Struts2,另一方面,是基于MVC(Model-View-Controller)设计模式的一个Java ...

    $.ajax传JSON数据到后台出现报错问题解决

    在使用jQuery的$.ajax方法向后台传输JSON数据时,可能会遇到一些常见的问题,这些问题往往会导致请求失败或在后台处理时产生错误。以下是一些关键点和解决方案,可以帮助开发者避免或解决这些问题。 首先,$.ajax...

    使用Ajax而不是Normal Post提交表单

    综上所述,使用Ajax代替Normal Post提交表单能带来更流畅的用户体验,同时需要理解其工作原理、与MVC框架的结合以及如何处理响应和错误。通过阅读《Post-a-form-using-Ajax-instead-of-Normal-Post.pdf》这份文档,...

    前端项目-jQuery.serializeObject.zip

    在前端开发中,数据的序列化是一个非常关键的步骤,特别是在表单提交或者与服务器进行交互时。`jQuery.serializeObject` 是一个非常实用的 jQuery 插件,它能够将 HTML 表单的数据转换成 JSON 格式,方便我们处理和...

    ios-网络请求.zip

    1. **URLSession**: Apple推荐使用URLSession来处理网络请求,它是iOS中的网络编程接口,取代了过时的NSURLConnection。URLSession提供了异步请求、下载任务、上传任务以及数据任务等功能,可以处理复杂的网络需求。...

    Rails-4-AJAX-Form:Rails 4 AJAX表单示例

    在Ruby on Rails框架中,AJAX(异步JavaScript和...在实际项目中,还可以结合其他库,如`turbolinks-track`来跟踪AJAX请求,或者使用`remote_form_with`(在Rails 5及以上版本中)代替`form_for`,进一步提升开发效率。

    AjaxRequest(Ajax使用包)

    5. **JSON (JavaScript Object Notation)**: 代替XML作为数据交换格式,更轻量级、更易于处理。 **AjaxRequest的使用** 在"ajaxrequest.js"这个文件中,可能包含了用于发起Ajax请求的函数或类。下面是一些常见的...

    PHP实例开发源码—PHP+Ajax无刷新文件上传代码.zip

    此外,确保文件名的安全性,避免注入攻击,比如使用随机生成的唯一ID代替用户提供的文件名。 10. **性能优化**:在处理大量或大文件上传时,考虑使用分块上传或进度条显示,以提高用户体验。同时,考虑使用CDN...

    html 网页表单填写

    如果表单元素数量较大,为提高性能,可以考虑使用`document.querySelector`或`document.querySelectorAll`代替`getElementById`,特别是当多个元素具有相同类名时。 总结,HTML网页表单是网页交互的核心,理解其...

    Android 网络请求的那些事Demo

    6. 使用Gson、Jackson等库进行JSON序列化和反序列化,简化数据处理。 7. 在Android 6.0及以上版本,使用运行时权限管理网络权限。 综上所述,“Android 网络请求的那些事Demo”涵盖了Android网络请求的基本概念、...

    AJAX-技术入门介绍.zip_ajax_异步请求

    - **JSON (JavaScript Object Notation)**: 通常用于代替XML,作为数据交换格式,因其更简洁和高效。 ### 2. AJAX 工作原理 当用户触发一个AJAX请求时,JavaScript会创建一个新的XMLHttpRequest对象,然后调用其`...

    AJAX 经典源码AJAX 经典源码

    在实际应用中,XML数据格式逐渐被JSON(JavaScript Object Notation)取代,因为JSON更轻量级、易读写,且JavaScript原生支持解析。因此,很多AJAX请求接收和发送的数据格式都是JSON。 5. **跨域问题**: 默认...

    ajax的基本用法

    2. **表单验证**:在提交前使用Ajax验证用户输入,提供即时反馈。 3. **实时更新**:如聊天应用、股票信息等,实时获取服务器端的新数据。 4. **文件上传**:通过FormData对象配合Ajax实现文件的异步上传,展示...

    jQuery_easyui+jQuery1.7API

    - Form:用于创建表单,支持验证和提交数据。 - Menu:创建下拉菜单,方便构建导航系统。 - Tree:展示层级结构的数据,如文件目录、组织结构等。 - Tabs:创建选项卡面板,便于管理多个内容区域。 2. 主要特性...

    接口测试postm.pdf

    变量类型包括form-data(主要用于文件上传)、x-www-form-urlencoded(常见于表单提交)、raw(适合上传JSON数据等)。通过点击上方按钮,进入Globals编辑全局变量,添加环境名称,定义变量名和对应值,保存后即可在...

    nodejs上传图片简单例子.zip

    3. package.json:记录项目依赖和配置的文件。 4. .bat文件:启动服务器的批处理文件,可能包含了`node server.js`类似的命令。 在`server.js`中,我们可能会看到如下关键代码片段: ```javascript const express ...

    amis前端低代码框架-其他

    5、提供完整的界面解决方案:其它 UI 框架必须使用 JavaScript 来组装业务逻辑,而 amis 只需 JSON 配置就能完成完整功能开发,包括数据获取、表单提交及验证等功能,做出来的页面不需要经过二次开发就能直接上线;...

    可兼容php5与php7的cURL文件上传功能实例分析

    当一个表单需要提交文件数据时,必须设置表单的enctype属性为“multipart/form-data”。这样做会将表单数据分成多个部分,每个部分对应一个表单控件的值,这样可以包含文件类型的数据。在cURL请求中设置POST字段时,...

    ios 系统自带http请求方法整理

    `URLSession`是iOS 7及更高版本中引入的网络编程接口,它取代了之前的`NSURLConnection`。`URLSession`提供了一种高效、灵活且可定制的方式来进行网络通信。通过`URLSession`,开发者可以处理各种类型的HTTP请求,...

Global site tag (gtag.js) - Google Analytics