处理的方式是将表单数据和数据对象都转成json再提交
第一步:
先将表单数据转成我们需要的json格式,通过自定义方法实现,(这个方法是我之前在某个文章拿过来的,但由于没找到原链接,只好在这里说明一下,如有侵权,私信我一下谢谢!)
//用于将表单数据转json
$.fn.serializeJson=function(){
var serializeObj={};
var array=this.serializeArray();
var str=this.serialize();
$(array).each(function(){
if(serializeObj[this.name]){
if($.isArray(serializeObj[this.name])){
serializeObj[this.name].push(this.value);
}else{
serializeObj[this.name]=[serializeObj[this.name],this.value];
}
}else{
serializeObj[this.name]=this.value;
}
});
return serializeObj;
};
第二步:
ajax请求:
var list = new Array();
for( i=0;i<id_name.length;i++){
if( id_name[i].checked){
id = cg_id_name[i].value;
list .push({id: id, cgr_initial_date: $("#initial_Date_time"+id).val(), expiry_date: $("#Date_time"+id).val(),usr_ent_id:$("#sr_ent_id").val() });
}
}
//其中 id_name是一个数据数组;
$.ajax({
url : "${ctx}/app/admin/Mgt/insert",
type : 'POST',
data: {
'mgtJson' : JSON.stringify($('#formId').serializeJson()),
'mgtGroupArrayJson' : JSON.stringify(list)
}
,
dataType : 'json',
traditional : true,
success : function(data) {
//alert("注册成功!");
}
第三步,在JsonUtils类构造json解析方法:
/**
* 从一个JSON 对象字符格式中得到一个java对象,形如:
* {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}
* @param object
* @param clazz
* @return
*/
public static Object getDTO(String jsonString, Class<?> clazz){
JSONObject jsonObject = null;
try{
setDataFormat2JAVA();
jsonObject = JSONObject.fromObject(jsonString);
filterNullParams(jsonObject);
}catch(Exception e){
e.printStackTrace();
}
return JSONObject.toBean(jsonObject, clazz);
}
/**
* 从一个JSON数组得到一个java对象数组,形如:
* [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]
* @param object
* @param clazz
* @return
*/
public static List<?> getDTOArray(String jsonString, Class<?> clazz){
JSONArray array = JSONArray.fromObject(jsonString);
List<Object> list = new ArrayList<Object>();
for(int i = 0; i < array.size(); i++){
JSONObject jsonObject = array.getJSONObject(i);
filterNullParams(jsonObject);
list.add(JSONObject.toBean(jsonObject, clazz));
}
return list;
}
private static void setDataFormat2JAVA(){
//设定日期转换格式
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"}));
}
第四步,controller接收:
@RequestMapping(value = "insert", method = RequestMethod.POST)
@ResponseBody
@SuppressWarnings("unchecked")
public String save(Model model,
@RequestParam(value = "mgtJson", required = false, defaultValue = "") String mgtJson,
@RequestParam(value = "mgtGroupArrayJson", required = false, defaultValue = "") String mgtGroupArrayJson) throws Exception {
Mgt mgt = (Mgt) JsonUtils.getDTO(mgtJson, Mgt.class);
List<mgtGroup> mgtGroups = (List<mgtGroup>) JsonUtils.getDTOArray(mgtGroupArrayJson, mgtGroup.class);
//进一步的业务
model.addAttribute("type", "add");
return JSON.toJSONString(model);
}