论坛首页 Web前端技术论坛

表单域与json数据间的交互

浏览 19771 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-13  
jquery用serializeArray 不是直接生成JSON对象,是生成组合对象数组,类似[{name: 'a', value: 'b'},{name: 'c', value: 'd'}]
完整
0 请登录后投票
   发表时间: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;
	}

}
0 请登录后投票
   发表时间:2008-10-14  
楼主有没有想过把json对象数据copy到任意html元素?
比如把{"id":"A1","innerHTML":"aaa"}的innerHTML复制到
<div id="A1"></div>
里面去?
0 请登录后投票
   发表时间:2008-10-14  
slaser 写道

楼主有没有想过把json对象数据copy到任意html元素?比如把{"id":"A1","innerHTML":"aaa"}的innerHTML复制到&lt;div id="A1"&gt;&lt;/div&gt;里面去?

有。。。  这个是要做扩展
即:
achun 写道

哈哈,终于看到有人和我有相同的想法了,(以前没有发现).

不过,其实这个想法可以延伸的,而且我已经延伸了.那就是:

既然是要得到JSON的数据,那一定和form有关么?非要从form中获取么?

当然不是.因此我写了一个基于jQuery的扩展


使得不拘泥于form
0 请登录后投票
   发表时间:2008-10-14  
shameant 写道

dojo.formToObject 可以把FORM分装成JSON对象

---谢谢提醒

看了下它的代码,并不支持级联,如a.b.id;和集合形式,如:a[0].b.id或
a[0].b[0].id的数据结构
0 请登录后投票
   发表时间:2008-10-15  
只获取form 的数据应该是历史原因吧,以前js 不流行时不是只自动提交form 的input 内容么。当时好像也没有dom 的概念

象级联的话 rails 不是从 Name 着手? name ='[a][b]c' 的就变成了 a.b.c

0 请登录后投票
   发表时间:2008-10-15  
这个思想不错,代码质量如何暂不管它,有空来研究下
0 请登录后投票
   发表时间:2008-10-15  
prototype中form.serialize有什么问题呢?
LZ不用?

实际上正如小胖提到的checkbox、multiSelect这些里面都有一些比较特殊的处理

要保持整个页面form和服务器端的某种程度上的一致,单靠一次json来做,很费力
但是交互多了也不太好,听听大家意见
0 请登录后投票
   发表时间: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对象也可以成为领域对象和服务器进行交互。

0 请登录后投票
   发表时间: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 是可以重复的。

0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics