- 浏览: 31831 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
jblzdg:
不好意思,本来就想在博客中记录下,没想到误操作,发到这里来。
...
关于Array和ArrayCollection的循环删除的问题
在Flex 开发过程中,经常遇到 java 对象转化为 Flex 对象的情形,手动编码,费时费力,枯燥无味,并且经常出现拼写错误,可谓事倍功半。所以就自己写了个自动生成类,发布在这里,请大家拍砖交流。呵呵。
为了开发简单,它遵循以下规则:
- Flex的包名和要转化的 java 类包名一直
- Flex的类名和要转化的 java 类名一直
使用:
- 在as.properties 文件(和GeneratorASFromJava在同一目录下)配置 Flex 文件的输出目录,只有一个属性。例如
outDir= d : /as
- 调用 GeneratorASFromJava ,传入参数:java.util.List<class> 。使用示例:
public static void main(String[] s) { List<Class> l =new java.util.ArrayList<Class>(); l.add(SecuUser.class); l.add(SecuRole.class); l.add(SecuResource.class); GeneratorASFromJava g = new GeneratorASFromJava(l); g.generate(); }
源文件解析:
AsObj.java:
根据java class 并参考 AsDataTypesUtils 返 回对应Flex 类源码,就是一串文本。
注意:
取java类的所有属性时,记得将Object的属性排除掉。
BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class );//意思是不分析clazz的父类Object
否则生成的Flex类会有下面这个属性:
public var class:java.lang.Class;
GeneratorASFromJava :
调用 AsObj生成 Flex 类并输出到 as.properties 配置的目录中,并打开这个目录。
附上源代码
AsObj :
package cn.com.zdg.flex.util; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.util.HashMap; import java.util.Map; public class AsObj { private String asPackageName; private String asClassName; private static String Field_Des = "public var "; private Map<String, String> map; private static String Blank = " "; static String Enter = "\r"; private static String Tab = "\t"; private static String BraceFirstEnter = "{" + Enter; private static String BraceLastEnter = "}" + Enter; private static String BraceLast = "}"; public AsObj(Class clazz) { this.asClassName = clazz.getSimpleName(); this.asPackageName = clazz.getPackage().getName(); this.map = getFieldMap(clazz); } public AsObj(String asPackageName, String asClassName, Map<String, String> map) { this.asPackageName = asPackageName; this.asClassName = asClassName; this.map = map; } public String getAsPackageName() { return asPackageName; } public void setAsPackageName(String asPackageName) { this.asPackageName = asPackageName; } public String getAsClassName() { return asClassName; } public void setAsClassName(String asClassName) { this.asClassName = asClassName; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public String getAsObjString() { StringBuilder sb = new StringBuilder(); // package sb.append("package ").append(this.asPackageName) .append(BraceFirstEnter); // Biandable sb.append(Tab).append("[Bindable]").append(Enter); //Remo sb.append(Tab).append("[RemoteClass(alias=\"").append(this.asPackageName).append(".").append(this.asClassName).append("\")]").append(Enter); // class sb.append(Tab).append("public class ").append(this.asClassName).append( BraceFirstEnter); // fields for (Map.Entry<String, String> entry : map.entrySet()) { sb.append(Tab).append(Tab).append(Field_Des).append(entry.getKey()) .append(":").append(entry.getValue()).append(";").append( Enter); } // constructor sb.append(Tab).append(Tab).append("public function ").append( this.asClassName).append("()").append(BraceFirstEnter).append( Enter).append(Tab).append(Tab).append(BraceLastEnter); // Brace last sb.append(Tab).append(BraceLastEnter); sb.append(BraceLast); return sb.toString(); } public static void main(String[] ar) { Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < 10; i++) { map.put("F1" + i, "Type" + i); } AsObj as = new AsObj("cn.com.zdg.as", "BruceTest", map); System.out.println(as.getAsObjString()); } private Map<String, String> getFieldMap(Class clazz) { Map<String, String> map = new HashMap<String, String>(); try { BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class); PropertyDescriptor[] pro = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor p : pro) { // if (p.getName().equals("class")) { // continue; // // } map.put(p.getName(),AsDataTypesUtils.getPreferredAsType( p.getPropertyType().getName())); } // for (int i = 0; i < pro.length; i++) { // PropertyDescriptor p = pro[i]; // System.out.println("Name: " + p.getName() + " , type: " // + p.getPropertyType().getName()); // // } } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } return map; } }
GeneratorASFromJava :
package cn.com.zdg.flex.util; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.Writer; import java.net.URL; import java.util.List; import java.util.Properties; import cn.com.zdg.entity.security.SecuResource; import cn.com.zdg.entity.security.SecuRole; import cn.com.zdg.entity.security.SecuUser; public class GeneratorASFromJava { private List<Class> javaclassList; private File destdir; private String baseDir; // public GeneratorASFromJava(Class) { // // } public GeneratorASFromJava() { } public GeneratorASFromJava(List<Class> javaclassList) { this.javaclassList = javaclassList; if (this.javaclassList==null||this.javaclassList.size()==0) { throw new IllegalStateException("Convert Class can not be null"); } baseDir = this.getBaseDir(); } private String getBaseDir() { String baseDir = null; InputStream input = null; try { String packageName = this.getClass().getPackage().getName(); packageName = packageName.replace(".", File.separator); URL url = GeneratorASFromJava.class.getClassLoader().getResource( packageName + File.separator + "as.properties"); Properties p = new Properties(); input = url.openStream(); p.load(input); baseDir = p.get("outDir").toString(); File f = new File(baseDir); if (!f.exists()) { f.mkdirs(); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (input != null) { input.close(); } } catch (IOException e) { e.printStackTrace(); } } return baseDir; } public void generate() { Writer writer = null; try { for (Class javaclass : javaclassList) { AsObj as = new AsObj(javaclass); File f = new File(getDestFile(javaclass), javaclass .getSimpleName() + ".as"); writer = new FileWriter(f); writer.write(as.getAsObjString()); writer.flush(); } Runtime.getRuntime().exec("cmd.exe /c start " + baseDir); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { writer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private File getDestFile(Class javaclass) { String dir = javaclass.getPackage().getName().replace(".", File.separator); File f = new File(baseDir, dir); if (!f.exists()) { f.mkdirs(); } return f; } public static void main(String[] s) { List<Class> l =new java.util.ArrayList<Class>(); l.add(SecuUser.class); l.add(SecuRole.class); l.add(SecuResource.class); GeneratorASFromJava g = new GeneratorASFromJava(l); g.generate(); } }
AsDataTypesUtils
package cn.com.zdg.flex.util; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 描述java类型和as类型对应关系 * */ public class AsDataTypesUtils { private final static Map<String, String> preferredAsTypeForJavaType = new HashMap<String, String>(); public static String getPreferredAsType(String javaType) { String result = preferredAsTypeForJavaType.get(javaType); if (result == null) { result = javaType; } return result; } static { preferredAsTypeForJavaType.put("java.lang.Short", "Number"); preferredAsTypeForJavaType.put("short", "Number"); preferredAsTypeForJavaType.put("java.lang.Integer", "Number"); preferredAsTypeForJavaType.put("int", "Number"); preferredAsTypeForJavaType.put("java.lang.Long", "Number"); preferredAsTypeForJavaType.put("long", "Number"); preferredAsTypeForJavaType.put("java.lang.Float", "Number"); preferredAsTypeForJavaType.put("float", "Number"); preferredAsTypeForJavaType.put("java.lang.Double", "Number"); preferredAsTypeForJavaType.put("float", "Number"); preferredAsTypeForJavaType.put("java.math.BigDecimal", "Number"); preferredAsTypeForJavaType.put("java.lang.Byte", "Number"); preferredAsTypeForJavaType.put("byte", "Number"); preferredAsTypeForJavaType.put("java.lang.Boolean", "Boolean"); preferredAsTypeForJavaType.put("boolen", "Boolean"); preferredAsTypeForJavaType.put(boolean.class.getName(), "Boolean"); preferredAsTypeForJavaType.put("char", "String"); preferredAsTypeForJavaType.put("char[]", "String"); preferredAsTypeForJavaType.put("java.lang.String", "String"); preferredAsTypeForJavaType.put("java.sql.Clob", "String"); preferredAsTypeForJavaType.put("byte[]", "flash.utils.ByteArray"); preferredAsTypeForJavaType.put("java.sql.Blob", "flash.utils.ByteArray"); preferredAsTypeForJavaType.put("java.sql.Array", "Array"); preferredAsTypeForJavaType.put("java.lang.reflect.Array", "Array"); preferredAsTypeForJavaType.put("java.util.Collection", "mx.collections.ArrayCollection"); preferredAsTypeForJavaType.put("java.util.List", "mx.collections.ArrayCollection"); preferredAsTypeForJavaType.put("java.util.ArrayList", "mx.collections.ArrayCollection"); preferredAsTypeForJavaType.put("java.util.ArrayList", "mx.collections.ArrayCollection"); preferredAsTypeForJavaType.put("java.util.Set", "Object"); preferredAsTypeForJavaType.put("java.util.HashSet", "Object"); preferredAsTypeForJavaType.put("java.util.Map", "Object"); preferredAsTypeForJavaType.put("java.util.HashMap", "Object"); preferredAsTypeForJavaType.put("java.sql.Date", "Date"); preferredAsTypeForJavaType.put("java.sql.Time", "Date"); preferredAsTypeForJavaType.put("java.util.Date", "Date"); preferredAsTypeForJavaType.put("java.sql.Timestamp", "Date"); } public static void main(String[] args) { String bb = AsDataTypesUtils.getPreferredAsType(List.class.getName()); System.out.println(bb); } }
相关推荐
Java则是一种广泛使用的面向对象的编程语言,尤其在企业级应用开发中占据重要地位。 标题"flex 和 java交互"指出了一个关键的技术融合,即Flex与Java的整合,允许Flex前端与Java后端进行数据和功能的通信。这种交互...
在Flex Builder或IntelliJ IDEA等IDE中,可以使用向导自动生成服务代码。例如: ```mxml endpoint="http://{server.name}:{server.port}/flex/services/SQLServerService" namespace="{your_namespace}"> ...
LCDS提供了许多高级功能,如Java对象到Flex对象的映射,RTMP协议支持,代理服务,以及服务端PDF生成等。虽然LCDS是收费产品,但免费版本也能满足基本需求。除此之外,还有其他数据服务解决方案,如AMFPHP,它们提供...
LCDS提供了与Flex客户端之间的高效通信机制,包括Java对象到Flex对象的映射、实时消息协议RTMP、Java类方法调用、代理服务以及服务器端PDF生成等功能。虽然LCDS是付费产品,但免费版本也可使用,只是可能缺少对多CPU...
这将自动生成相应的ACTIONSCRIPT类,用于调用JAVA服务。 5. **编写ACTIONSCRIPT代码**:在ACTIONSCRIPT代码中,你可以直接调用这些生成的类,通过AMF或HTTP请求与JAVA服务通信。当JAVA服务返回数据时,ACTIONSCRIPT...
LCDS,原名FDS(Flex Data Service),是Adobe提供的基于Java后端的数据服务,能够方便地将Java对象映射到Flex对象,支持RTMP协议,以及服务器端PDF生成等高级功能。 **1. Flex简介** Flex是一个基于MXML和...
它能够将Java对象映射到Flex对象,包括调用Java类的方法,以及支持RTMP协议。LCDS还包括代理服务、PDF生成等高级特性。虽然LCDS是付费产品,但也有免费版本,不过可能限制了多CPU支持。 Java,作为一种广泛使用的...
《基于遗传算法的自动排课系统:Flex+Java的创新实践》 自动排课系统是教育信息化领域的重要组成部分,它能够高效地解决学校课程安排的复杂问题。本系统的开发运用了遗传算法,这是一种模拟生物进化过程的优化算法...
尽管现有的 EmployeeMgmt 应用程序已经有了 Façade 接口,但这个接口是暴露给 Servlet 使用的,最好能再为 Flex 定义另一个接口 FlexService,并隐藏 Java 语言的特定对象(如 清单 1 所示): 清单 1. Flex...
为了能完成自动生成 RemoteObject 对象,我编写了一个 Java2ActionScript 的 Ant 任务来自动转换 FlexService 接口以及相关的所有 JavaBean。JavaInterface2RemoteObjectTask 完成一个 Java 接口对象到 RemoteObject...
使用Blazeds,开发者可以在Flex界面中直接操作Java对象,比如EJB、Spring Bean或Hibernate实体,无需手动编写复杂的网络通信代码。此外,Blazeds还集成了Spring框架,使得Java服务的集成更加方便。 在实际开发中,...
这个代理类可以通过Flex的WebService或RemoteObject组件自动生成,通过指定服务的URL和方法名来完成。 5. **调用Java服务**:在Flex应用中,你可以像调用本地方法一样调用远程的Java服务。服务调用的结果会自动转换...
结合Hibernate,一个强大的对象关系映射(ORM)框架,可以简化数据库操作,使得Java代码更加简洁,减少SQL的编写工作。 Spring框架作为企业级应用的基石,提供了依赖注入(DI)和面向切面编程(AOP)等核心功能,...
LCDS支持实时消息传输、对象映射、远程方法调用、PDF生成等功能,简化了Flex与后端系统的交互。虽然LCDS是商业产品,但在个人和小规模项目中有免费版本可用。 3. **Blazeds**:Blazeds是Adobe从LCDS中剥离出的开源...
在Flex与Java交互时,类型转换是自动进行的,由AMF处理。然而,有些特殊情况需要注意: - **自定义类的序列化**:如果Flex客户端使用了自定义类,那么Java服务器端也需要有对应的类定义,否则AMF无法正确解析。 - *...
2. 创建Java项目:编写Java类,使用JDBC连接到MySQL数据库,执行查询,并将结果集转换为Java对象集合。 3. 配置BlazeDS:在Tomcat服务器中设置BlazeDS服务,定义所需的Remoting Destination,使Flex客户端能够调用...
- 自动生成的Flex配置文件 - Flex编译后发布的文件(位于WebRoot) 4. **其他配置** - 可以通过项目属性进行更详细的设置。 - 如果使用BlazeDS,需要注意不要覆盖其创建的web.xml文件。 #### 五、总结 本文...