`
laodaobazi
  • 浏览: 276518 次
  • 性别: 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}  } }

分享到:
评论

相关推荐

    Ext中grid多行数据全部删除

    ### Ext中grid多行数据全部删除 在前端开发过程中,我们经常会遇到需要处理表格数据的情况。其中,ExtJS是一个非常强大的JavaScript框架,它提供了一系列工具和组件来帮助开发者快速构建复杂的用户界面。本文将详细...

    Ext 开发指南 学习资料

    修改一个grid的ColumnModel和Store A.9.3. 动态为ds添加参数baseParams A.10. 有关tree的一些小问题 A.10.1. 如何选中树中的某个节点 A.10.2. 刷新树的所有节点 A.10.3. 如果取得json中自定义的属性 A.11. 如何使用...

    Ext+JS高级程序设计.rar

    第3章 Ext Core实例—.NET语言实现 35 3.1 创建应用并设置开发环境 35 3.2 自定义Membership提供程序 37 3.3 创建母版页 38 3.4 首页设计 42 3.5 产品列表页 47 3.6 产品详细信息页 51 3.7 登录对话框 56 3.8 用户...

    EXT2.0中文教程

    4.8.4. 当某一天,需要往form加个图片什么的,该咋办? 4.9. 还要做文件上传哟 4.10. 非想非想,单选框多选框 4.10.1. 多选呢checkbox 4.10.2. 单选呢radio 5. 雀跃吧!超脱了一切的弹出窗口。 5.1. 呵呵~跳出来和...

    Ext Js权威指南(.zip.001

    10.3.3 为行添加附加信息:ext.grid.featrue.rowbody / 538 10.3.4 数据汇总功能:ext.grid.featrue.abstractsummary与ext.grid.featrue. summary / 539 10.3.5 分组功能:ext.grid.featrue.grouping / 543 ...

    Ext gridPane

    10. **工具栏**:可以自定义Grid上方的工具栏,添加按钮、下拉框、文本框等组件,实现更多的功能,如搜索、打印、导出数据等。 11. **性能优化**:通过虚拟滚动、延迟渲染等技术,Ext GridPane在处理大量数据时仍然...

    dwr与Ext

    4. **数据绑定**:由于Ext JS的强大数据绑定能力,可以将DWR返回的数据动态地绑定到Grid、TreePanel或其他UI组件上,实现数据的实时更新。 5. **性能优化**:使用DWR时要注意性能优化,比如批量处理请求、缓存结果...

    Extjs4学习指南

    - **Grid多选/全选**:实现对表格行的多选和全选功能,方便批量操作。 - **可编辑的Grid**:实现对表格数据的在线编辑功能。 - **图片验证码的实现**:添加验证码功能以提高安全性。 - **TabPanel**:创建标签面板来...

    去掉gridPanel表头全选框的小例子

    在`gridPanel`中,表头的全选框功能允许用户一键选择所有行,这对于批量操作非常方便。然而,有些情况下,开发者可能希望去掉这个全选框,以满足特定的界面设计需求或业务逻辑。本篇将详细讲解如何去除`gridPanel`...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

Global site tag (gtag.js) - Google Analytics