對于BeanUtils這個工具,我也用的不是很多,但是還是有點心得和大家分享下,呵呵~~用過spring的都知道spring的MVC框架中有一個BaseCommandController對象,利用這個對象我們就可以很方便的將從客戶端傳遞過來的參數封裝到一個JavaBean對象中去,而不需要我們request.getParameter("name");bean.setName(name);了,從而也簡化了不少的工作。其實在structs中也有這樣的功能的,不過它用的BeanUtils這個工具類,也就是我今天要給大家說的這個類。
commons-beanutils組件是Jakarta Commons項目組中的一個,可以到Jakarta官網上去下載。我們今天討論的主要就是commons-beanutils中的BeanUtils這個類,這個類都是靜態方法,可以很方便的操縱各個JavaBean對象,包括獲取屬性、設置屬性等,我們以例子來進行說明。
假設有如下一個JavaBean對象:
public TestBean
{
private String stringValue;
private int intValue;
public void setStringValue(String value)
{
this.stringValue = value;
}
public String getStringValue()
{
return this.stringValue;
}
public void setIntValue(int value)
{
this.intValue = value;
}
public int getIntValue()
{
return this.intValue;
}
}
那么我們就可以使用BeanUtils來對其進行設置值和獲取值了。如下:
TestBean tb = new TestBean();
BeanUtils.setProperty(tb, "stringValue", "hello world!");
BeanUtils.setProperty(tb, "intValue", 123);
通過上述的語句我們就可以給新new的對象設置兩個屬性了,注意其中第一個參數就是我們的屬性名稱,這里也是我們在使用這個工具的時候最需要注意的地方。這個屬性名稱就是我們的TestBean中的getXXX方法中的XXX,比如getStringValue中其屬性名稱就是stringValue,在使用屬性名稱的時候,除了XXX中的第一個字母不需要大小寫之外,其他的部分是需要嚴格區分大小寫的,這也是JavaBean的規范。這里有一點需要特別注意的就是,如果屬性名稱中第一個單詞(我們界定的)只有一個字母的話,那么其屬性名稱必須大寫!我們可以看這樣一個例子:
我們給TestBean加如下一個屬性:
……
public void setTName(String name)
{
this.name = name;
}
public void getTName()
{
return this.name;
}
……
那么在使用BeanUtils進行屬性賦值的時候,如果你這樣寫:
BeanUtils.setProperty(tb, "tName", "hello");
那么就會被拋出一個異常,表示這個屬性找不到,因為按照JavaBean的規范,屬性名稱中如果有多個單詞,則每一個單詞的首字母要大寫!這里BeanUtils就會認為屬性TName是兩個單詞,分別是T和Name,所以取屬性的時候第一個字母必須要大寫,所以其屬性就應該是;TName,那么我們就應該如下寫操作語句:
BeanUtils.setProperty(tb, "TName", "hello");
這樣寫才是正確的。那么我們來看在B/S結構的程序中,如何將表單域的參數(不一定是表單域,是參數都可以)轉換成一個JavaBean對象,我們以上面的Bean為例子,我們在頁面上進行編寫如下:
……
<form name="form1" action="/getbean.jsp">
字符串值:<input type="text" name="stringValue" /><br/>
數字值:<input type="text" name="intValue" /><br/>
</form>
……
然后我們在服務器端進行編寫如下代碼來獲取參數,并組裝成一個TestBean對象,代碼如下:
……
TestBean tb = new TestBean();
BeanUtils.populate(tb, request.getParameterMap());
// 使用BeanUtils工具類來獲取對象的屬性
System.out.println(BeanUtils.getProperty("stringValue"));
System.out.print(BeanUtils.getProperty("intValue"));
// 直接獲取對象的屬性
System.out.println(tb.getStringValue());
System.out.println(tb.getIntValue());
……
我們注意到,在表單區域中編寫的幾個輸入框的名稱(紅色標識的部分)就是我們的TestBean對象的屬性名稱,然后服務器端的代碼中,我們首先使用request.getParameterMap()來獲取提交的參數,并轉換成一個map對象存儲(鍵是參數名稱,值是提交的值),然后我們使用BeanUtils的populate方法來進行賦值。通過打印后,我們可以看到我們輸入的值被成功的設置到對象中去了,可以看到簡單的兩行代碼就可以搞定參數到對象的數據綁定工作,如果一個對象有十幾個甚至幾十個參數屬性的話,那么這樣的方式將是非常簡便的,至少可以少寫十幾行甚至幾十行的代碼。
可以看到利用BeanUtils這個工具類可以很方便的進行JavaBean的屬性操作和request的參數到JavaBean的屬性綁定操作。其他的功能大家就可以參看它的API文檔了
其實Jakarta Commons項目組中還有很多實用的工具類,如:common-io,common-lang,common-logging,common-pool等等.
posted on 2008-06-12 17:52
henry1451 閱讀(697)
評論(0) 編輯 收藏 所屬分類:
開源技術