`
laodaobazi
  • 浏览: 272653 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ext Grid 实现批量添加或者修改

阅读更多

将ExtJS Grid 中的record逐一转化为Bean,实现批量的添加或者修改

 

package com.hwasun.utils;

import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;

import org.junit.Test;

/**
 * 将Ext中Store的data数据转化为Java中的List
 * @author JLee v .10
 * @since 2011-2-25
 * @function 主要是为了ext中可编辑的grid实现批量添加与修改
 * 将注解的地方放开可以测试一下
 */
public class Json2List {

	@Test
	//将Store中的data(即:多个record)转化为多个bean
	public Object JSON4Hibernate(Class clazz ,String json)throws Exception{
		System.out.println("将要解析的JSON串"+json);
		List list = new ArrayList();
		
		JSONObject jsonObjSplit = JSONObject.fromObject(json);
		JSONArray ja = jsonObjSplit.getJSONArray("data");
		for (int i = 0; i < ja.size(); i++) {
			
			Object bean = clazz.newInstance() ;
			Class c = bean.getClass() ;
			Field[] fs = c.getDeclaredFields();
			
			JSONObject jsonObject = (JSONObject) ja.get(i);
			for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
				String key = (String) iter.next();
				String value = jsonObject.getString(key);
				//为了父类赋值 适应继承 过来的ID
				if("id".equals(key)){
					modifyId(bean,"id",value) ;
				}
				//为自己的实体每个属性赋值
				for (Field f : fs) {
					if(f.getName().equals(key)){
						Object vType = convertValueType(bean,f ,value);
						mf1(bean,f.getName(),vType);
					}
				}
			}
			list.add(bean) ;
		}
		return list ;
	}
	
	//对bean的属性进行判断,然后将JSON中的值转化为对应的类型
	public Object convertValueType(Object o,Field f, String value) throws Exception {
		Object ov = null ;
		String fieldTypeName = f.getType().getName();
		if (fieldTypeName.equals("int")||fieldTypeName.equals("java.lang.Integer")) {
			ov = value!=null&&value!="null"&&!"".equals(value)?Integer.parseInt(value):null ;
		} else if (fieldTypeName.equals("long")||fieldTypeName.equals("java.lang.Long")) {
			ov = value!=null&&value!="null"&&!"".equals(value)?Long.parseLong(value):null ;
		} else if (fieldTypeName.equals("float")||fieldTypeName.equals("java.lang.Float")) {
			ov = value!=null&&value!="null"&&!"".equals(value)?Float.parseFloat(value):null ;
		} else if (fieldTypeName.equals("double")||fieldTypeName.equals("java.lang.Double")) {
			ov = value!=null&&value!="null"&&!"".equals(value)?Double.parseDouble(value):null ;
		} else if (fieldTypeName.equals("boolean")||fieldTypeName.equals("java.lang.Boolean")) {
			ov = value!=null&&value!="null"&&!"".equals(value)?Boolean.parseBoolean(value):null ;
		} else if (fieldTypeName.equals("java.util.Date")) {
			if(value.length()>11){
                                                    ov = value!=null&&value!="null"&&!"".equals(value)?new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(value):null ;
                                                }else{
                                                    ov = value!=null&&value!="null"&&!"".equals(value)?new SimpleDateFormat("yyyy-MM-dd").parse(value):null ;
                                                }		
                                } else if (fieldTypeName.equals("java.lang.String")) {
			ov = (String)value ;
		} else if (fieldTypeName.equals("java.lang.Object")) {
			ov = (Object)value ;
		} else {
			 Field oField = o.getClass().getDeclaredField(f.getName());
			 if (oField != null) {   
                oField.setAccessible(true);   
                Object entity = oField.get(o);   
                if (entity == null) {
                    entity = oField.getType().newInstance();   
                }
                ov = json2Object(value ,entity);
            }   
		}
		return ov ;
	}

	//将{name:"jlee",sex:"male",age:18,job:"student"}json格式付给bean中对应的Object属性
	public Object json2Object(String json ,Object entity)throws Exception{
		Class c = entity.getClass();
		Field[] fs = c.getDeclaredFields();
		if("[".equals(json.substring(0, 1))){
			json = json.substring(1) ;
		}
		if("]".equals(json.substring(json.length()-1))){
			json = json.substring(0,json.length()-1) ;
		}
	    JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(json);
		for (Iterator iter = jsonObject.keys(); iter.hasNext();) {
			String key = (String)iter.next();
			String value = jsonObject .getString(key) ;
                        //为了父类赋值 适应继承 过来的ID
			if("id".equals(key)){
				modifyId(entity,"id",value) ;
			}
			for (Field f : fs) {
				if(f.getName().equals(key)){
					Object vType = convertValueType(entity,f ,value);
					mf1(entity,f.getName(),vType);
				}
			}
		}
		return entity ;
	}
	
	//修改bean的属性值
	public void mf1(Object o , String fieldName ,Object newValue)throws Exception {
		Class c = o.getClass() ;
		Field f = c.getDeclaredField(fieldName);
		f.setAccessible(true);
		f.set(o, newValue);
	}

	//修改父类的 ID 值
	public void modifyId(Object bean ,String fieldName ,String value) throws Exception{
		Class c = bean.getClass().getSuperclass() ;
		Field[] array = c.getDeclaredFields() ;
		for(Field _f : array){
			if(_f.getName().equals(fieldName)){
				Field f = c.getDeclaredField(fieldName);
				Object vType = convertValueType(bean,f ,value);
				f.setAccessible(true);
				f.set(bean, vType);
			}
		}
	}
	
	public static void main(String[] args)throws Exception {
		String json = "{data:[" +
						"{id:'',name:'Lily',amount:'100',num:'12.3',isRight:'true',myTest:{id:'1',name:'test1',myTest:{id:'32'}}}," +
						"{id:'4',name:'Jim',amount:'200',num:'12.4',isRight:'false',myTest:{id:'2',name:'test2',myTest:{id:'3'}}}" +
					  "]}";
		Json2List mj = new Json2List();
		Object list = mj.JSON4Hibernate(MyBean.class,json);
		for(MyBean mb : (List<MyBean>)list){
			System.out.println("解析之后的Bean:"+mb.toString());
		}
	}
	
}



 class MyBean {

	private Integer id ;
	private String name ;
	private Long amount ;
	private boolean isRight ;
	private double num ;
	
	private MyTest myTest ;
	
	public MyTest getMyTest() {
		return myTest;
	}
	public void setMyTest(MyTest myTest) {
		this.myTest = myTest;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Long getAmount() {
		return amount;
	}
	public void setAmount(Long amount) {
		this.amount = amount;
	}
	public boolean getIsRight() {
		return isRight;
	}
	public void setIsRight(boolean isRight) {
		this.isRight = isRight;
	}
	public double getNum() {
		return num;
	}
	public void setNum(double num) {
		this.num = num;
	}
	
	@Override
	public String toString() {
		return "bean的值   { id:"+this.getId()+"   name:"+this.getName()
				+"   num:"+this.getNum()+"  amount:"+this.getAmount() 
				+ "  isRight:" + this.getIsRight()+ "   myTest:"+this.getMyTest().toString()+" }";
	}
	
}

 

  class MyTest {

 	private int id ;
 	
 	private String name ;
 	
 	private MyTest myTest ;
 	

 	public MyTest getMyTest() {
		return myTest;
	}

	public void setMyTest(MyTest myTest) {
		this.myTest = myTest;
	}

	public int getId() {
 		return id;
 	}

 	public void setId(int id) {
 		this.id = id;
 	}

 	public String getName() {
 		return name;
 	}

 	public void setName(String name) {
 		this.name = name;
 	}
 	
 	@Override
 	public String toString() {
 		return "{id:"+this.getId()+","+"name:"+this.getName()+"  myTest:{  id:"+this.getMyTest().getId()+"}"+"  }";
 	}
 }

 

运行结果:

将要解析的JSON串{data:[{id:'',name:'Lily',amount:'100',num:'12.3',isRight:'true',myTest:{id:'1',name:'test1',myTest:{id:'32'}}},{id:'4',name:'Jim',amount:'200',num:'12.4',isRight:'false',myTest:{id:'2',name:'test2',myTest:{id:'3'}}}]}
解析之后的Bean:bean的值   { id:null   name:Lily   num:12.3  amount:100  isRight:true   myTest:{id:1,name:test1  myTest:{  id:32}  } }
解析之后的Bean:bean的值   { id:4   name:Jim   num:12.4  amount:200  isRight:false   myTest:{id:2,name:test2  myTest:{  id:3}  } }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics