ajax实现表单与数组对象同时作为参数提交

处理的方式是将表单数据和数据对象都转成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

第三步,在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 list = new ArrayList();
        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 mgtGroups = (List) JsonUtils.getDTOArray(mgtGroupArrayJson, mgtGroup.class);
		//进一步的业务
		model.addAttribute("type", "add");
		return JSON.toJSONString(model);
    }

你可能感兴趣的:(JAVA,ajax,json)