锁定老帖子 主题:表单域与json数据间的交互
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-13
jquery用serializeArray 不是直接生成JSON对象,是生成组合对象数组,类似[{name: 'a', value: 'b'},{name: 'c', value: 'd'}]
完整 |
|
返回顶楼 | |
发表时间:2008-10-13
whiletrue 写道 我想问下日期类型你是怎么判断的呢?也就是如何在json里面做标志,然后转成java对象的,学习下 fins 写道 你用什么工具做的转换啊? json和java转换的东西我做过很多 你这个问题 建议在转换前就处理好 是int 型 还是string 型你必须要明确的告诉 转换器 目前我的做法是 json --->java 时 , 按字符串从sjon中取值 在向 java对象中赋值时 判断对象的类型 然后做响应的转换. btw: select-multiple的数据在客户端时 都是字符串型 最后到后台是什么类型取决于你的需求. 这个我尝试了下 json-->java 在用json-lib把jsonString转换成jsonObject之前 JSONObject.fromObject(jsonString) 增加注册: JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"})); java-->json 在用json-lib把java转换成jsonObject之前 JSONArray.fromObject(object, jsonConfig)或 JSONObject.fromObject(object, jsonConfig 增加配置: jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValueProcessor()); 其中JsonDateValueProcessor是自己扩展处理的 public class JsonDateValueProcessor implements JsonValueProcessor { private String format = "yyyy-MM-dd HH:mm:ss"; public JsonDateValueProcessor() { } public JsonDateValueProcessor(String format) { this.format = format; } public Object processArrayValue(Object value, JsonConfig jsonConfig) { String[] obj = {}; if (value instanceof Date[]) { SimpleDateFormat sf = new SimpleDateFormat(format); Date[] dates = (Date[]) value; obj = new String[dates.length]; for (int i = 0; i < dates.length; i++) { obj[i] = sf.format(dates[i]); } } return obj; } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { if (value instanceof Date) { String str = new SimpleDateFormat(format).format((Date) value); return str; } return value == null ? null : value.toString(); } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } } |
|
返回顶楼 | |
发表时间:2008-10-14
楼主有没有想过把json对象数据copy到任意html元素?
比如把{"id":"A1","innerHTML":"aaa"}的innerHTML复制到 <div id="A1"></div> 里面去? |
|
返回顶楼 | |
发表时间:2008-10-14
slaser 写道 楼主有没有想过把json对象数据copy到任意html元素?比如把{"id":"A1","innerHTML":"aaa"}的innerHTML复制到<div id="A1"></div>里面去? 有。。。 这个是要做扩展 即: achun 写道 哈哈,终于看到有人和我有相同的想法了,(以前没有发现). 不过,其实这个想法可以延伸的,而且我已经延伸了.那就是: 既然是要得到JSON的数据,那一定和form有关么?非要从form中获取么? 当然不是.因此我写了一个基于jQuery的扩展 使得不拘泥于form |
|
返回顶楼 | |
发表时间:2008-10-14
shameant 写道 dojo.formToObject 可以把FORM分装成JSON对象 ---谢谢提醒 看了下它的代码,并不支持级联,如a.b.id;和集合形式,如:a[0].b.id或 a[0].b[0].id的数据结构 |
|
返回顶楼 | |
发表时间:2008-10-15
只获取form 的数据应该是历史原因吧,以前js 不流行时不是只自动提交form 的input 内容么。当时好像也没有dom 的概念
象级联的话 rails 不是从 Name 着手? name ='[a][b]c' 的就变成了 a.b.c |
|
返回顶楼 | |
发表时间:2008-10-15
这个思想不错,代码质量如何暂不管它,有空来研究下
|
|
返回顶楼 | |
发表时间:2008-10-15
prototype中form.serialize有什么问题呢?
LZ不用? 实际上正如小胖提到的checkbox、multiSelect这些里面都有一些比较特殊的处理 要保持整个页面form和服务器端的某种程度上的一致,单靠一次json来做,很费力 但是交互多了也不太好,听听大家意见 |
|
返回顶楼 | |
发表时间:2008-10-15
走得再远点,HTML元素转化为后台json对象不一定要按name或者id来进行绑定的。因为html元素是面向界面的,而json对象可能是个领域对象。 比如: var customer1 = {"id":0,"name":"adidas"}; <div id="custome-id"></div> <input id="customer-name" type="text"> 应该能允许,customer1的id送到customer-id中,而"adidas"显示于customer-name里面。 完成这个功能不应该靠id值的默认匹配,而是应该有类似的绑定机制,比如:
BindingFactory.bind("custome-id",customer1.id); BindingFactory.bind("custome-name",customer1.name); 这样html里面元素的id可以和json里面的结构往不同的方向演化。json对象也可以成为领域对象和服务器进行交互。 |
|
返回顶楼 | |
发表时间:2008-10-16
slaser 写道
走得再远点,HTML元素转化为后台json对象不一定要按name或者id来进行绑定的。因为html元素是面向界面的,而json对象可能是个领域对象。 比如: var customer1 = {"id":0,"name":"adidas"}; <div id="custome-id"></div> <input id="customer-name" type="text"> 应该能允许,customer1的id送到customer-id中,而"adidas"显示于customer-name里面。 完成这个功能不应该靠id值的默认匹配,而是应该有类似的绑定机制,比如:
BindingFactory.bind("custome-id",customer1.id); BindingFactory.bind("custome-name",customer1.name); 这样html里面元素的id可以和json里面的结构往不同的方向演化。json对象也可以成为领域对象和服务器进行交互。
这样程序就复杂了嘛,按rails 的约定大于配置,最好就是名字刚好一样。所以用name 不用 id,因为name 是可以重复的。 |
|
返回顶楼 | |