麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Jakarta Commons BeanUtils(轉(zhuǎn))

2019-11-18 14:17:38
字體:
供稿:網(wǎng)友

  1.簡介
在一般的寫bean組件的時候,都必須要寫setter和getter方法,當(dāng)然假如我們事先已經(jīng)知道bean的相關(guān)屬性和
方法,寫bean是比較簡單的,但是組件太多的時候,重復(fù)編寫經(jīng)常是枯燥乏味令人厭煩的。但當(dāng)有些時候我么需
要調(diào)用動態(tài)對象的屬性的時候,我們應(yīng)該怎么來設(shè)定和獲取對象的屬性呢?BeanUtils就可以幫助我們來解決這
個問題。它需要Collections包和logging包的支持。最新版本1.7,文檔還是1.6.1的.
2.已經(jīng)使用BeanUtils的事例
*構(gòu)建和java對象模型交互的腳本語言,比如Bean Scripting Framework
*構(gòu)建web層顯示和相似用途的模板語言處理器,如jsp或者Velocity
*構(gòu)建適用于jsp和xsp環(huán)境的自定義標(biāo)簽庫,如Jakarta Taglibs,Struts,Cocoon
*處理基于xml的配置資源文件,如Ant創(chuàng)建腳本,應(yīng)用程序部署文件和Tomcat的xml配置文件
3.API簡介
BeanUtils 的 Java API 主要的 package 總共四個
org.apache.commons.beanutils
這個是BeanUtils最基本的包,提供了處理getter和setter方法屬性的類
org.apache.commons.beanutils.converters
Converter接口的標(biāo)準(zhǔn)實現(xiàn),在啟動的時候和ConvertUtils一同注冊
org.apache.commons.beanutils.locale
組件的本地化處理包
org.apache.commons.beanutils.locale.converters
LocaleConverter接口的標(biāo)準(zhǔn)實現(xiàn),啟動的時候和LocaleConvertUtils 一同注冊
4.org.apache.commons.beanutils介紹
這四個包本專題只介紹這一個,其他的使用的時候請自己參考它的文檔,文檔內(nèi)容寫得很好.
1.PRopertyUtils
它支持三種類型的屬性值-Simple,Indexed,Mapped
我們先創(chuàng)建一個簡單的bean
public class Employee {
public Address getAddress(String type);
public void setAddress(String type, Address address);
public Employee getSubordinate(int index);
public void setSubordinate(int index, Employee subordinate);
public String getFirstName();
public void setFirstName(String firstName);
public String getLastName();
public void setLastName(String lastName);
}
*Simple屬性訪問方法
PropertyUtils.getSimpleProperty(Object bean, String name)
PropertyUtils.setSimpleProperty(Object bean, String name, Object value)
實現(xiàn)代碼:
Employee employee = ...;
String firstName = (String)
PropertyUtils.getSimpleProperty(employee, "firstName");
String lastName = (String)
PropertyUtils.getSimpleProperty(employee, "lastName");
... manipulate the values ...
PropertyUtils.setSimpleProperty(employee, "firstName", firstName);
PropertyUtils.setSimpleProperty(employee, "lastName", lastName);
*Indexed屬性訪問方法
PropertyUtils.getIndexedProperty(Object bean, String name)
PropertyUtils.getIndexedProperty(Object bean, String name, int index)
PropertyUtils.setIndexedProperty(Object bean, String name, Object value)
PropertyUtils.setIndexedProperty(Object bean, String name, int index, Object value)
實現(xiàn)代碼:
Employee employee = ...;
int index = ...;
String name = "subordinate[" + index + "]";
Employee subordinate = (Employee)
PropertyUtils.getIndexedProperty(employee, name);//根據(jù)value取得屬性

Employee employee = ...;
int index = ...;
Employee subordinate = (Employee)
PropertyUtils.getIndexedProperty(employee, "subordinate", index);//根據(jù)索引
值取的屬性值
*Mapped屬性訪問方法
PropertyUtils.getMappedProperty(Object bean, String name)
PropertyUtils.getMappedProperty(Object bean, String name, String key)
PropertyUtils.setMappedProperty(Object bean, String name, Object value)
PropertyUtils.setMappedProperty(Object bean, String name, String key, Object value)
實現(xiàn)代碼:
Employee employee = ...;
Address address = ...;
PropertyUtils.setMappedProperty(employee, "address(home)", address);//根據(jù)數(shù)組
//內(nèi)的值來去的相應(yīng)的屬性值
Employee employee = ...;
Address address = ...;
PropertyUtils.setMappedProperty(employee, "address", "home", address);
*Nested屬性訪問方法//Nested的意思是參數(shù)中包含組件
PropertyUtils.getNestedProperty(Object bean, String name)
PropertyUtils.setNestedProperty(Object bean, String name, Object value)
實現(xiàn)代碼:
String city = (String) PropertyUtils.getNestedProperty(employee,
"address(home).city");
2.BeanUtils.DynaBean and BeanUtils.DynaClass 接口介紹
DynaBean必須有一個bean來實現(xiàn)這個接口,DynaClass必有一個bean的屬性集來實現(xiàn)
*BasicDynaBean and BasicDynaClass - 基本的 Dynamic 類型
基本的API:
BasicDynaClass(java.lang.String name, java.lang.Class dynaBeanClass, DynaProperty[] properties)
BasicDynaBean(DynaClass dynaClass)
我們線定義一下基本的代碼:
//定義動態(tài)屬性集
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)
};
//創(chuàng)建動態(tài)類來設(shè)定動態(tài)屬性值
BasicDynaClass dynaClass = new BasicDynaClass("employee", null, props);
DynaBean employee = dynaClass.newInstance();
employee.set("address", new HashMap());
employee.set("subordinate", new mypackage.Employee[0]);
employee.set("firstName", "Fred");
employee.set("lastName", "Flintstone");
*ResultSetDynaClass (Wraps ResultSet in DynaBeans) - 使用 ResultSet 的
Dynamic JavaBean
API:
ResultSetDynaClass(java.sql.ResultSet resultSet)
ResultSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)
Connection conn = ...;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery
("select account_id, name from customers");
Iterator rows = (new ResultSetDynaClass(rs)).iterator();
while (rows.hasNext()) {
//利用動態(tài)bean進行輸出
DynaBean row = (DynaBean) rows.next();
System.out.println("Account number is " +
row.get("account_id") +
" and name is " + row.get("name"));
}
rs.close();
stmt.close();
*RowSetDynaClass (Disconnected ResultSet as DynaBeans) - 使用 RowSet 的 Dynamic
JavaBean
API:
RowSetDynaClass(java.sql.ResultSet resultSet)
RowSetDynaClass(java.sql.ResultSet resultSet, boolean lowerCase)

Connection conn = ...; // 從緩沖池取得連接
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ...");
RowSetDynaClass rsdc = new RowSetDynaClass(rs);
rs.close();
stmt.close();
...; //關(guān)閉連接返回緩沖池
List rows = rsdc.getRows();
...; // 處理得到的行
2.BeanUtils.ConvertUtils 介紹
這個包主要用來轉(zhuǎn)換從request傳遞過來的函數(shù)
主要函數(shù):
ConvertUtils().convert(java.lang.Object value)
ConvertUtils().convert(java.lang.String[] values, java.lang.Class clazz)
ConvertUtils().convert(java.lang.String value, java.lang.Class clazz)
實現(xiàn)例子:
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);//用ConvertUtils進行轉(zhuǎn)換
目前支持的轉(zhuǎn)換類型:
sjava.lang.BigDecimal
java.lang.BigInteger
boolean and java.lang.Boolean
byte and java.lang.Byte
char and java.lang.Character
java.lang.Class
double and java.lang.Double
float and java.lang.Float
int and java.lang.Integer
long and java.lang.Long
short and java.lang.Short
java.lang.String
java.sql.Date
java.sql.Time
java.sql.Timestamp
5.參考資料或文章:
*http://jakarta.apache.org/commons/beanutils/api/index.Html
*http://jakarta.apache.org/commons/beanutils/index.html
*http://apache.linuxforum.net/dist/jakarta/commons/beanutils/binaries/commons-beanutils-1.6.1.zip

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产一级性生活视频 | 国产在线精品一区二区三区不卡 | 成年免费大片黄在线观看岛国 | 一区二区三区视频在线观看 | 精品一区二区在线观看视频 | 欧美视频在线一区二区三区 | 国产精品刺激对白麻豆99 | 国产资源在线免费观看 | 色中色激情影院 | 国产伦精品一区二区三区 | av在线更新 | 伦理三区| 男女一边摸一边做羞羞视频免费 | 欧美日韩在线免费观看 | 毛片在线视频观看 | 久久久久久久久久久久久久久久久久 | 91一区二区三区久久久久国产乱 | hd极品free性xxx护士人 | 日日操夜 | 午夜视频在线免费观看 | 久草在线高清 | 黄色毛片18 | 一级成人欧美一区在线观看 | 九九热九九热 | 一级α片免费看刺激高潮视频 | 国产午夜免费福利 | 日韩色视频在线观看 | 一级做a爱片久久 | 91福利影视 | 精品小视频 | 欧美一级黄 | 国产成人在线网址 | 国产影院一区 | 精品国产91久久久久久久妲己 | 欧美精品欧美 | 国产刺激高潮av | 失禁高潮抽搐喷水h | 成人做爰高潮片免费视频韩国 | 久久久亚洲欧美综合 | 国产精品热| 欧美日韩一区三区 |