我們在Web開發(fā)中,可能經(jīng)常會(huì)從表單中取值,然后封裝成一個(gè)bean的時(shí)候。
可能你也是這樣做的:
String?uname?=?(String)request.getParameter("uname");
String?upass?=?(String)request.getParameter("upass");
User?u?=?new?User(uname,upass);
或者
U.set……
u.set……
等等
如果字段很多的話,可能前面就要很多的各這樣的過程。也許你也會(huì)覺得很是麻煩,又沒有好的辦法。
我們可以使用反射來實(shí)現(xiàn),也許可以減輕一點(diǎn)您的負(fù)擔(dān)。
代碼如下:
User?u?=?new?User();
??
??Enumeration?m?=?request.getParameterNames();
??while(m.hasMoreElements()){
???String??pn?=?(String)m.nextElement();
???out.println(pn?+?"?---?");
???String??pv?=?(String)request.getParameter(pn);
???out.println(?pv?+?"<br>");
???
???Class?c?=?u.getClass();???
???out.println("?class?is?:?"?+?c?+?"<br>");
???
???try?{
???????
????Field?f?=?c.getField(pn);
????
????out.println("field?is?:?"?+?f?+?"<br>");
????f.set(u,?pv);
????
????out.println("?user?name?is?:?"?+?u.getUname()?+?"<br>");
????out.println("?user?pass?is?:?"?+?u.getUpass()?+?"<br>");
????
???}?catch?(SecurityException?e)?{
????//?TODO?Auto-generated?catch?block
????e.printStackTrace();
???}?catch?(NoSuchFieldException?e)?{
????//?TODO?Auto-generated?catch?block
????e.printStackTrace();
???}?catch?(IllegalArgumentException?e)?{
????//?TODO?Auto-generated?catch?block
????e.printStackTrace();
???}?catch?(IllegalAccessException?e)?{
????//?TODO?Auto-generated?catch?block
????e.printStackTrace();
???}
??}
??我們也可以把這個(gè)部分封裝起來成一個(gè)類,實(shí)現(xiàn)從request到一個(gè)bean的注入。
上面的方法有一個(gè)缺點(diǎn),由于我們使用的Field來實(shí)現(xiàn)的,所以,能取得的字段一定要聲明成public,如果是private的,就不能取到了。
測試結(jié)果如下:
uname?---?zywewqeqwe
class?is?:?class?org.zy.demo.sd.bean.User
private?field?is?:?private?java.lang.String?org.zy.demo.sd.bean.User.uname
upass?---?zywqeqweqweqw
class?is?:?class?org.zy.demo.sd.bean.User
private?field?is?:?private?java.lang.String?org.zy.demo.sd.bean.User.upass
解決上面的問題,我們可以使用另外一個(gè)方法:
?
????Field?f?=?c.getDeclaredField(pn);
????out.println("?private?field?is?:?"?+?f?+?"<br>");
就這一個(gè)方法的不同就可以實(shí)現(xiàn)和上面的不同的結(jié)果,上面的
?Field?f?=?c.getField(pn);
可以能取public的字段,但是
getDeclaredField(pn);
同時(shí)可以取到private字段的值。
注意:
上面的功能要能實(shí)現(xiàn),要保證form的字段和bean定義的字段的完全一致。
希望自己的一點(diǎn)小小的體會(huì)能對(duì)您起到一點(diǎn)幫助作用。
|----------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------|
posted on 2007-09-21 18:08
zhyiwww 閱讀(1200)
評(píng)論(2) 編輯 收藏 所屬分類:
j2ee