传统的html提交在处理复杂对象的编辑时显得力不从心,结构性的数据在经过后台jsp或者asp处理,展示为前台的html表单后,成为平面型的form的input,这样,当form提交到后台,服务不得不重新将平面型的构造为结构性数据,以进行后续的处理。
在采用O/R mapping的应用中,这样的展示方式成为开发工作的瓶颈。
WebRPC能够实现结构化数据在B/S之间的双向序列化,主流的实现如DWR,jsonRPC都提供了java对象——js对象之间的双向序列化。
本文以jsonRPC与Ext2.0结合,通过以下步骤验证了用结构化数据取代传统form形式的可行性。
- 将多个java对象序列化到Browser的js对象(json格式)
- 将json格式的js对象与Ext form进行绑定
- Ext界面组件负责交互,编辑数据
- 编辑结果更新到js对象
- js对象提交到后台,反序列化为java对象
关键代码如下:
1.java对象序列化为json格式
java 代码
- static public String format(Object o) throws Exception{
- JSONSerializer ser = new JSONSerializer();
- ser.registerDefaultSerializers();
- SerializerState state = new SerializerState();
- JSONRPCResult result = new JSONRPCResult(JSONRPCResult.CODE_SUCCESS,
- new Integer(1), ser.marshall(state, o));
- return result.toString();
- }
2.json格式到Browser后,调用eval,形成js对象
js 代码
- var jo;
- try {
- eval('jo = <%=dt.format(dt.getDefaultObjs()) %>');
- } catch(e) {
- throw new JSONRpcClient.Exception(550, "error parsing result");
- }
3.js对象与Ext组件绑定
js 代码
- function jsonload(fm, m){
- fm.obj = m;
- for(x in m){
- var fld = fm.find('name',x);
- if(fld.length==1)
- fld[0].setValue(m[x]);
- }
- }
4.Ext组件编辑结果更新
js 代码
- function jsonupdate(fm){
- if(!fm.obj) return;
- var m=fm.obj;
- for(x in m){
- var fld = fm.find('name',x);
- if(fld.length==1)
- m[x]=fld[0].getValue();
- }
- }
5.js对象序列化为json字符串,并提交
js 代码
- var jostr = toJSON(jo);
- var el = Ext.getDom("jostr");
- el.value=jostr;
- var fm = Ext.getDom("fm1");
- fm.submit();
6.json字符串反序列化为java对象
java 代码
- static public Object parse(String s) throws Exception{
- JSONObject jo = new JSONObject(s);
- JSONSerializer ser = new JSONSerializer();
- ser.registerDefaultSerializers();
- SerializerState state = new SerializerState();
- Object result= ser.unmarshall(state, null, jo.get("result"));
- return result;
- }
页面是修改Ext2.0范例 examples\form\dynamic.html形成的,只保留了其中的tab-form示例用于多个对象的编辑
涉及的jsonRPC、Ext库(2.0)请自行下载
相关推荐
使用 `Request.Form` 可以获取提交的表单数据,该方法可以获取到所有的表单数据,包括文本框、下拉框、复选框等。 2. 通过映射到控制器参数方式 使用控制器参数可以将提交的数据直接映射到控制器的参数中,该方法...
它通过AJAX(Asynchronous JavaScript and XML)技术实现,尽管现在大多数情况下,XML已经被JSON所取代,因为JSON更轻量级且易于处理。 Struts2,另一方面,是基于MVC(Model-View-Controller)设计模式的一个Java ...
在使用jQuery的$.ajax方法向后台传输JSON数据时,可能会遇到一些常见的问题,这些问题往往会导致请求失败或在后台处理时产生错误。以下是一些关键点和解决方案,可以帮助开发者避免或解决这些问题。 首先,$.ajax...
综上所述,使用Ajax代替Normal Post提交表单能带来更流畅的用户体验,同时需要理解其工作原理、与MVC框架的结合以及如何处理响应和错误。通过阅读《Post-a-form-using-Ajax-instead-of-Normal-Post.pdf》这份文档,...
在前端开发中,数据的序列化是一个非常关键的步骤,特别是在表单提交或者与服务器进行交互时。`jQuery.serializeObject` 是一个非常实用的 jQuery 插件,它能够将 HTML 表单的数据转换成 JSON 格式,方便我们处理和...
1. **URLSession**: Apple推荐使用URLSession来处理网络请求,它是iOS中的网络编程接口,取代了过时的NSURLConnection。URLSession提供了异步请求、下载任务、上传任务以及数据任务等功能,可以处理复杂的网络需求。...
在Ruby on Rails框架中,AJAX(异步JavaScript和...在实际项目中,还可以结合其他库,如`turbolinks-track`来跟踪AJAX请求,或者使用`remote_form_with`(在Rails 5及以上版本中)代替`form_for`,进一步提升开发效率。
5. **JSON (JavaScript Object Notation)**: 代替XML作为数据交换格式,更轻量级、更易于处理。 **AjaxRequest的使用** 在"ajaxrequest.js"这个文件中,可能包含了用于发起Ajax请求的函数或类。下面是一些常见的...
此外,确保文件名的安全性,避免注入攻击,比如使用随机生成的唯一ID代替用户提供的文件名。 10. **性能优化**:在处理大量或大文件上传时,考虑使用分块上传或进度条显示,以提高用户体验。同时,考虑使用CDN...
如果表单元素数量较大,为提高性能,可以考虑使用`document.querySelector`或`document.querySelectorAll`代替`getElementById`,特别是当多个元素具有相同类名时。 总结,HTML网页表单是网页交互的核心,理解其...
6. 使用Gson、Jackson等库进行JSON序列化和反序列化,简化数据处理。 7. 在Android 6.0及以上版本,使用运行时权限管理网络权限。 综上所述,“Android 网络请求的那些事Demo”涵盖了Android网络请求的基本概念、...
- **JSON (JavaScript Object Notation)**: 通常用于代替XML,作为数据交换格式,因其更简洁和高效。 ### 2. AJAX 工作原理 当用户触发一个AJAX请求时,JavaScript会创建一个新的XMLHttpRequest对象,然后调用其`...
在实际应用中,XML数据格式逐渐被JSON(JavaScript Object Notation)取代,因为JSON更轻量级、易读写,且JavaScript原生支持解析。因此,很多AJAX请求接收和发送的数据格式都是JSON。 5. **跨域问题**: 默认...
2. **表单验证**:在提交前使用Ajax验证用户输入,提供即时反馈。 3. **实时更新**:如聊天应用、股票信息等,实时获取服务器端的新数据。 4. **文件上传**:通过FormData对象配合Ajax实现文件的异步上传,展示...
- Form:用于创建表单,支持验证和提交数据。 - Menu:创建下拉菜单,方便构建导航系统。 - Tree:展示层级结构的数据,如文件目录、组织结构等。 - Tabs:创建选项卡面板,便于管理多个内容区域。 2. 主要特性...
变量类型包括form-data(主要用于文件上传)、x-www-form-urlencoded(常见于表单提交)、raw(适合上传JSON数据等)。通过点击上方按钮,进入Globals编辑全局变量,添加环境名称,定义变量名和对应值,保存后即可在...
3. package.json:记录项目依赖和配置的文件。 4. .bat文件:启动服务器的批处理文件,可能包含了`node server.js`类似的命令。 在`server.js`中,我们可能会看到如下关键代码片段: ```javascript const express ...
5、提供完整的界面解决方案:其它 UI 框架必须使用 JavaScript 来组装业务逻辑,而 amis 只需 JSON 配置就能完成完整功能开发,包括数据获取、表单提交及验证等功能,做出来的页面不需要经过二次开发就能直接上线;...
当一个表单需要提交文件数据时,必须设置表单的enctype属性为“multipart/form-data”。这样做会将表单数据分成多个部分,每个部分对应一个表单控件的值,这样可以包含文件类型的数据。在cURL请求中设置POST字段时,...
`URLSession`是iOS 7及更高版本中引入的网络编程接口,它取代了之前的`NSURLConnection`。`URLSession`提供了一种高效、灵活且可定制的方式来进行网络通信。通过`URLSession`,开发者可以处理各种类型的HTTP请求,...