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

asobj2javaobj

    博客分类:
  • flex
阅读更多
我试过不建立As对象也可以实现java对象的转换
flex相关jar包中java对象转换到AS对象中间有个ASObject(一个java类继承MAP)他把java类的属性读出放到其Map映射返回到flex前台就是ASObject了
就是说你new 一个ASOBject 按照MAP设置好属性,值 到前台就是一个ASObject对象可以直接用该对象取值

总结就是:
flex对象传到java(如果没经过绑定强转)都看成ASObject 其为一个Map型集合可以通过类属性充当Key从中取值
flex中集合传来都看成flex.messaging.io.ArrayCollection该集合实现List接口传递给flex flex可以直接识别
flexObjec <--> ASObject(flex.messaging.io.amf.ASObject) <---> javaObject
flexArray <--> ArrayCollection(flex.messaging.io.ArrayCollection) <---> javaArray(List)

例:我查询数据库返回ASObject到flex
import flex.messaging.io.ArrayCollection;

public ArrayCollection getSqlData(String sql)
    {
       ArrayCollection asList = new ArrayCollection(jdbc.getSqlData(sql));  
        return asList;
    }
这是我自己写的一个类尝试转换的 时间久远那些方法测试过没我也忘了(基于Spring相关类)


/**
			  * flex类未指定对应java对象
			  * 
			  * 将flex提交于java后台的数据对应到java对象中
			  * @param fromObj
			  * @param toObj
			  */
			 public static void flexObjectToVo(ASObject fromObj,Object toObj)
			 {
				 Assert.notNull(fromObj, "Flex对象为空");
				 Assert.notNull(toObj, "java对象为空");
				 PropertyDescriptor targetPds[] = BeanUtils.getPropertyDescriptors(toObj.getClass());  //遍历获取java对象全部属性
				 for (Object obj : targetPds)  //循环遍历属性
				 {
					 PropertyDescriptor targetPd = (PropertyDescriptor)obj;
			         if(targetPd.getWriteMethod() == null) //获取该属性的set方法如果无则继续下次循环
			             continue;
			         
			         //有set方法的属性 vo的正常属性
			         try
			         {
			         Object value = fromObj.get(targetPd.getName()); //flex提交的值
			         Method writeMethod = targetPd.getWriteMethod();
		             if(!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers()))
		                 writeMethod.setAccessible(true); //设置到Vo
		             writeMethod.invoke(toObj, new Object[] {value});
			         }
			         catch(Throwable e)
			         {
			        	 System.out.println("从flex拷值到java对象错误"+e.getMessage()+"\n 当前造成错误的属性"+targetPd.getName());
			        	 continue; //当前属性为空 继续赋值
			         }
					
				 }
			 }
			 
			 
			 /**
			  * flex类未指定对应java对象
			  * 
			  * 将flex提交于java后台的数据对应到java对象中
			  * @param fromObj
			  * @param toObj
			  */
			 public static Object getflexObjectToVo(ASObject fromObj,Object toObj)
			 {
				 Assert.notNull(fromObj, "Flex对象为空");
				 Assert.notNull(toObj, "java对象为空");
				 PropertyDescriptor targetPds[] = BeanUtils.getPropertyDescriptors(toObj.getClass());  //遍历获取java对象全部属性
				 for (Object obj : targetPds)  //循环遍历属性
				 {
					 PropertyDescriptor targetPd = (PropertyDescriptor)obj;
			         if(targetPd.getWriteMethod() == null) //获取该属性的set方法如果无则继续下次循环
			             continue;
			         
			         //有set方法的属性 vo的正常属性
			         try
			         {
			         Object value = fromObj.get(targetPd.getName()); //flex提交的值
			         Method writeMethod = targetPd.getWriteMethod();
		             if(!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers()))
		                 writeMethod.setAccessible(true); //设置到Vo
		             writeMethod.invoke(toObj, new Object[] {value});
			         }
			         catch(Throwable e)
			         {
			        	 System.out.println("从flex拷值到java对象错误"+e.getMessage()+"\n 当前造成错误的属性"+targetPd.getName());
			        	 continue; //当前属性为空 继续赋值
			         }
					
				 }
				 return toObj;
			 }
			 
			 /**
			  * flex类指定对应java对象
			  * 
			  * 将flex提交于java后台的数据对应到java对象中
			  * @param fromObj
			  * @param toObj
			  */
			 public static Object flexObjectToVo(ASObject fromObj)
			 {
				 Object toObj = null;
				 try
				 {
				  toObj = Class.forName(fromObj.getType()).newInstance();
				 }catch (Exception e)
				 {
					 System.out.println("从flex指定类型中获取java类失败"+e.getMessage());
					 return null;
				 }
				 
				 Assert.notNull(fromObj, "Flex对象为空");
				 Assert.notNull(toObj, "java对象为空");
				 PropertyDescriptor targetPds[] = BeanUtils.getPropertyDescriptors(toObj.getClass());  //遍历获取java对象全部属性
				 for (Object obj : targetPds)  //循环遍历属性
				 {
					 PropertyDescriptor targetPd = (PropertyDescriptor)obj;
			         if(targetPd.getWriteMethod() == null) //获取该属性的set方法如果无则继续下次循环
			             continue;
			         
			         //有set方法的属性 vo的正常属性
			         try
			         {
			         Object value = fromObj.get(targetPd.getName()); //flex提交的值
			         Method writeMethod = targetPd.getWriteMethod();
		             if(!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers()))
		                 writeMethod.setAccessible(true); //设置到Vo
		             writeMethod.invoke(toObj, new Object[] {value});
			         }
			         catch(Throwable e)
			         {
			        	 System.out.println("从flex拷值到java对象错误"+e.getMessage()+"\n 当前造成错误的属性"+targetPd.getName());
			        	 continue; //当前属性为空 继续赋值
			         }
					
				 }
				 
				 return toObj;
			 }
             
			 /**
			  * 将flex传递与java的集合转换成toObj形式并以集合返回
			  * @param ASOList
			  * @param toObj
			  * @return
			  */
			 public static List flexObjectToVo(List ASOList,Object toObj)
			 {
				 Assert.notNull(toObj, "java对象为空");
				 List<Object> returnList = new LinkedList<Object>();
				 for ( int i = 0 ; i < ASOList.size(); i++)
				 {
					 ASObject asObj = (ASObject)ASOList.get(i);
					 returnList.add(getflexObjectToVo(asObj,toObj));
				 }
				 return returnList;
			 }
			 
			 /**
			  * 将结果集放到as对象
			  * @param asObject
			  * @param rs
			  */
			 public static void getChartFlexList(ASObject asObject,ResultSet rs)
			 {
				 try {
					int ci = rs.getMetaData().getColumnCount();
					for (int i = 1 ; i <=ci ; i++)
					{			
						asObject.put(rs.getMetaData().getColumnName(i), rs.getObject(i));		
					}
				} catch (SQLException e) {
					System.out.println("sql 异常"+e.getMessage());
				} //总列数
			 }
			 
			 
			 /**
			  * 将结果集放到as集合中 这样实现结果集有序及重复
			  * @param asObject
			  * @param rs
			  */
			 public static void getChartFlexList(ArrayCollection asList,ResultSet rs)
			 {
				 try {
					int ci = rs.getMetaData().getColumnCount();
					
					for (int i = 1 ; i <=ci ; i++)						
					{	
						ASObject asObject = new ASObject();	
						asObject.put(rs.getMetaData().getColumnName(i), rs.getObject(i));	
						asList.add(asObject);
					}
				} catch (SQLException e) {
					System.out.println("sql 异常"+e.getMessage());
				} //总列数
			 }
分享到:
评论

相关推荐

    前端开源库-asobj

    2. **对象克隆**:克隆对象是开发中常见的需求,asobj的克隆方法能确保新对象与原始对象在值上相同,但不共享引用,这在需要避免副作用的情况下特别关键。 3. **对象查找与删除**:asobj库提供了查找对象中特定属性...

    XSuperObect最新版本

    同时,`AsArray`和`AsObj`方法则用于处理JSON数组和对象。对于遍历JSON数据,`ForEach`方法是不可或缺的,它允许开发者方便地迭代JSON对象或数组的所有元素。 在Delphi XE中,XSuperObject不仅提供了基础的JSON操作...

    angelscript中文资料

    engine-&gt;RegisterObjectType("MyClass", sizeof(MyClass), asOBJ_REF); engine-&gt;RegisterObjectBehaviour("MyClass", asBEHAVE_CONSTRUCT, "void f()", asMETHOD(MyClass, MyClass), asCALL_THISCALL); ``` 2. *...

    Delphi使用ISuperObject解析Json.rar

    2. 使用`LoadFromData`或`LoadFromStream`方法将JSON字符串或流加载到`ISuperObject`实例中。例如,如果你有一个JSON字符串`JSonStr`: ```delphi JSON.LoadFromData(JSonStr); ``` 3. 解析后的JSON数据现在存储在`...

    JSOn.rar_Pascal_

    2. **Pascal中的JSON处理库**: Delphi提供了几个流行的库来处理JSON,如`SuperObject`, `JsonFast`, `Indy JSON`等。这些库提供了方便的API,使得在Pascal中解析JSON字符串为对象,或者将对象序列化为JSON字符串变...

Global site tag (gtag.js) - Google Analytics