- 浏览: 7339162 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
Commons-BeanUtils中动态bean的学习的应用(类型Flex和javascript的动态添加属性)
- 博客分类:
- Apache开源组件研究
使用过Javascript和Flex的人,一定对这两种语言的中对象的中动态添加属性感到好奇,特别是Flex,其实如果你仔细看一下Commons-beanUtils的帮助文档,你会发现其实也没有什么,Java也可以实现动态添加属性。
commons-beanutils的常用功能包括类型转换和动态bean的创建。
关于类型转换主要用到BeanUtils 和 ConvertUtils。BeanUtils的使用是大家最熟悉的了。将javax.servlet.HttpServletRequest接受的参数转换到对应到指定的JavaBean,这是Struts等许多MVC框架中的基本服务之一。
在一次HTTP请求中,请求参数值都是字符串或字符串数组,大多数值需要被转换为底层的数据类型。BeanUtils提供了属性的setter方法,以接受字符串的值,并自动把它们转换成合适的属性类型,和getter方法,当调用getter方法时,又进行一次类型转换。除此之外,populate()方法可以把一个map中的键值对转换为bean里面的属性和值。例如
HttpServletRequest request = ...; MyBean bean = ...; HashMap map = new HashMap(); Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); map.put(name, request.getParameterValues(name)); } BeanUtils.populate(bean, map);
当然BeanUtils底层依赖于ConvertUtils。ConvertUtils的使用简单,常用方法如下
static String convert(Object value) //转换指定值为字符串 static Object convert(Object value, Class targetType) //转换指定值为指定的类 static Object convert(String[] values, Class clazz) //将字符串数组转换为指定类型的数组 static Object convert(String value, Class clazz) //转换字符串为一指定类型
下面举例说明(如无特别说明,下面的所有Java代码均以此xml文件为操作对象)
<?xml version="1.0" encoding="UTF-8"?> <origin dataSource="ds"> <columns> <column code="ID" name="" type="java.lang.Integer" length="" /> <column code="FIRSTNAME" name="" type="java.lang.String" length="" /> <column code="LASTNAME" name="" type="java.lang.String" length="" /> <column code="SEX" name="" type="java.lang.String" length="" /> </columns> </origin>
XMLConfiguration config = new XMLConfiguration(String); //关于XML的读取在“commons-configuration的使用”中讲过 String id = config.getString("columns.column.[@code]"); //拿到第一个Column的code String type = config.getString("columns.column.[@type]"); //拿到第一个Column的type Object value = ConvertUtils.convert(id,Class.forName(type)); //转换了
动态bean的创建也很简单,常用API如下
org.apache.commons.beanutils.DynaBean org.apache.commons.beanutils.DynaClass org.apache.commons.beanutils.BasicDynaBean //实现了DynaBean org.apache.commons.beanutils.BasicDynaClass //实现了DynaClass org.apache.commons.beanutils.DynaProperty
第一步,就是要创建动态class
DynaProperty[] props = new DynaProperty[]{ new DynaProperty("address", java.util.Map.class), new DynaProperty("subordinate", mypackage.Employee[].class), new DynaProperty("firstName", String.class), new DynaProperty("lastName", String.class) }; // BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props); //主要是构造props动态属性数组,名字"employee"和bean类型(这里是null)无关紧要
第二步,创建动态bean
DynaBean employee = dynaClass.newInstance(); employee.set("address", new HashMap()); employee.set("subordinate", new mypackage.Employee[0]); employee.set("firstName", "Fred"); employee.set("lastName", "Flintstone");
现在,把xml文件中的所有column属性构造一个动态class(动态class.newInstance()就可以生成一个bean了,所以不讨论动态bean),在如下代码中originDynaClass就是生成的动态class
List<HierarchicalConfiguration> columns = (List<HierarchicalConfiguration>) config.configurationsAt("origin.bean.columns.column"); DynaProperty[] properties = new DynaProperty[columns.size()]; for (int i = 0; i < columns.size(); i++) { HierarchicalConfiguration column = (HierarchicalConfiguration)columns.get(i); try { properties[i] = new DynaProperty(column.getString("[@code]"),Class.forName(column.getString("[@type]"))); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block logger.error("类型转换异常", e); } } BasicDynaClass originDynaClass = new BasicDynaClass ("origin", BasicDynaBean.class, properties);
package cn.com.unutrip.java.opensource.apache.beanutils;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.beanutils.BasicDynaClass;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.LazyDynaBean;
/**
* BeanUtils中动态bean的学习的应用
*
* @author longgangbai
*
*/
public class DynaBeansExampleV1 {
public static void main(String args[]) throws Exception {
Object movie = createMovieBean();
System.err.println(BeanUtils.getProperty(movie, "title"));
System.err.println(BeanUtils.getProperty(movie, "director.name"));
}
private static Object createMovieBean() throws Exception {
// first create the properties
DynaProperty properties[] = new DynaProperty[] { new DynaProperty("title", String.class), new DynaProperty("dateOfRelease", Date.class),
new DynaProperty("keywords", String[].class), new DynaProperty("genre", Map.class), new DynaProperty("actors", List.class),
new DynaProperty("director", DynaBean.class) };
// next using the properties define the class
DynaClass movieClass = new BasicDynaClass("movie", null, properties);
// now, with the class, create a new instance
DynaBean movieBean = movieClass.newInstance();
// set its properties
movieBean.set("title", "The Italian Job");
movieBean.set("dateOfRelease", new GregorianCalendar(1969, 0, 1).getTime());
movieBean.set("keywords", new String[] { "Italy", "Bank Robbery" });
Map genre = new HashMap();
genre.put("THR", "Thriller");
movieBean.set("genre", genre);
movieBean.set("genre", "ACT", "Action");
DynaBean director = createPersonBean();
director.set("name", "Peter Collinson");
director.set("gender", new Integer(1));
movieBean.set("director", director);
return movieBean;
}
private static DynaBean createPersonBean() {
DynaBean person = new LazyDynaBean();
return person;
}
}
发表评论
-
[转]Jython初探
2014-01-07 11:19 2409转载自: ... -
ireport导出各种格式(pdf,excel,word,html,print)
2013-05-02 16:59 10050import java.io.IOException; ... -
【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务
2013-04-03 12:11 6794Atomikos数据源配置方法有三种 Atomikos数 ... -
【转】Apache Thrift入门1-架构&介绍
2013-04-02 13:26 2039Thrift 是什么? Thrift ... -
【转】Thrift入门及Java实例演示
2013-04-02 12:47 2587目录: 概述 下载配置 基本概念 数据类型 ... -
【转】Thrift入门试用
2013-04-02 12:39 2182在新的项目中公司在平台内部系统间使用Thrift通讯,都没 ... -
【转】thrift的安装
2013-04-02 12:38 2092一、ubuntu下thrift的安装 1.下载源代码 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9707官方geoserver中WMS服务中几种操作的API的详细说明 ... -
POI3.8组件研究(九)----让POI架起Java与Office之间的桥梁
2012-06-17 14:37 4328本文将阐述如何用POI来读取/写入完整的Excel文 ... -
POI3.8组件研究(八)--基于SXSSF (Streaming Usermodel API)的写文件
2012-06-17 14:17 14435在POI3.8中SXSSF仅仅支持excel2 ... -
POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析
2012-06-17 14:00 5368针对Event API事件解析仅仅支持excel97~ ... -
POI3.8组件研究(六)---struts2.0 视图层文件页面点击导出
2012-06-17 13:23 2418在struts2.0中点击导出按钮将信息导出为exce ... -
POI3.8组件研究(五)---excel文件内容抽取为文本
2012-06-15 09:15 4366在一个搜索引擎的使用中需要将各种文件转化为文本 ... -
POI3.8组件研究(四)--Event API (HSSF Only)事件的解析
2012-06-14 17:37 9064通过eventusermodel读取文件 ... -
POI3.8组件研究(二)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:46 3218在解析生成excel2003和 ... -
POI3.8组件研究(一)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:29 5355在以前的Excel解析时候,我们通常需要编写Ex ... -
EasyPOI的使用
2012-02-12 17:06 5319EasyPOI 的目的是封装了poi的写excel的API。 ... -
Commons-net FTPClient上传下载的封装
2011-08-25 08:30 11512在项目中使用到FTP功能,于是采用类似Spri ... -
Java将第三方jar文件打包到一个jar中的插件(fatjar)
2011-08-19 22:17 4337<!-- google_ad_section_star ... -
Apache的Commons-configuration自动加载特性
2011-07-24 19:04 4083在一些项目可能配置文件经常变化,配置文件的类型可能 ...
相关推荐
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar ...4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-beanutils-core-1.8.0.jar
在本文中,我们将深入探讨`commons-beanutils-1.9.4`这个版本,了解其核心功能、使用场景以及如何在项目中集成和应用。 Apache Commons BeanUtils库的主要目标是简化JavaBean对象的属性访问。它通过提供一系列静态...
在给定的压缩包文件中,包含了两个版本的Apache Commons BeanUtils库:`commons-beanutils-1.8.0`和`commons-beanutils-1.8.3`。 Apache Commons BeanUtils的核心功能包括: 1. **属性访问**:BeanUtils提供了一...
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
解决办法是把commons-beanutils中的org/apache/commons/collections删除,这里上传一个改好可以直接使用的。
在实际应用中,`commons-beanutils-1.8.3.jar`常与其他Apache Commons库(如Collections、Lang等)结合使用,以实现更强大的功能。例如,结合Commons Collections,可以方便地处理复杂的数据结构;结合Commons Lang...
- **属性访问**:`commons-beanutils` 提供了`BeanUtils`类,能够通过反射机制动态地访问Bean的属性,支持属性的读取和设置。 - **属性拷贝**:`copyProperties()`方法使得能够将一个Bean的所有属性值复制到另一个...
`commons-beanutils-1.9.3-sources.jar`则是源代码包,它包含了BeanUtils库的完整源代码,这对于开发者进行调试、学习和自定义扩展非常有用。通过查看源代码,可以深入理解内部的工作机制,以及如何有效地利用这些...
commons-beanutils-bean-collections.jar commons-beanutils-bean-collections.jar
赠送jar包:commons-beanutils-1.9.3.jar; 赠送原API文档:commons-beanutils-1.9.3-javadoc.jar; 赠送源代码:commons-beanutils-1.9.3-sources.jar; 包含翻译后的API文档:commons-beanutils-1.9.3-javadoc-...
这三款库在Java开发中应用广泛,特别是在处理对象属性、集合操作和通用工具类时。它们使得代码更加简洁,减少了重复工作,并提高了代码的可读性和可维护性。在实际项目中,根据需求选择合适版本的Apache Commons库,...
赠送jar包:commons-beanutils-1.9.3.jar; 赠送原API文档:commons-beanutils-1.9.3-javadoc.jar; 赠送源代码:commons-beanutils-1.9.3-sources.jar; 包含翻译后的API文档:commons-beanutils-1.9.3-javadoc-...
总的来说,`commons-beanutils-1.9.1.jar`和`commons-logging-1.1.3.jar`是Java开发中的两个重要工具,它们简化了JavaBeans的操作,并提供了灵活的日志机制。这两个库的结合使用,体现了Java设计原则中的“依赖倒置...
赠送jar包:commons-beanutils-1.7.0.jar; 赠送原API文档:commons-beanutils-1.7.0-javadoc.jar; 赠送源代码:commons-beanutils-1.7.0-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.7.0.pom; ...
赠送jar包:commons-beanutils-1.9.1.jar; 赠送原API文档:commons-beanutils-1.9.1-javadoc.jar; 赠送源代码:commons-beanutils-1.9.1-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.1.pom; ...
赠送jar包:commons-beanutils-1.7.0.jar; 赠送原API文档:commons-beanutils-1.7.0-javadoc.jar; 赠送源代码:commons-beanutils-1.7.0-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.7.0.pom; ...
而Apache Commons BeanUtils库则为这些操作提供了便利,它通过反射机制来动态地访问和修改JavaBean的属性,使得代码更加简洁和易维护。 1. **属性访问与设置** BeanUtils库的核心功能就是属性的访问和设置。通过`...
commons-beanutils-1.8.2.jar,commons-codec-1.4.jar,commons-collections-3.2.1.jar,commons-dbcp-1.2.2.jar,commons-digester-2.0.jar,commons-fileupload-1.2.1.jar,commons-httpclient.jar,commons-io-...
这里提到的三个JAR文件——`commons-beanutils.jar`、`commons-collections-3.1.jar`和`commons-pool-1.2.jar`,都是Apache Commons项目的一部分,分别涉及Bean操作、集合操作和对象池化。 **1. `commons-beanutils...