三如何應用類反射機制簡化Struts應用程序的開發: 先定義Action FormBean: package com
bhsky
webis
system; import org
apache
struts
action
*; import javax
servlet
http
*; public class UsersActionForm extends ActionForm { private String usr_id; private String usr_name; public void setUsr_id(String usr_id) { this
usr_id = usr_id; } public String getUsr_id() { return usr_id; } public String getUsr_memo() { return usr_memo; } public void setUsr_name(String usr_name) { this
usr_name = usr_name; } }
編寫通用的為ActionFormBean賦值的方法
///////////////////////////////////////////////////////////////////////////// //Function: 完成ResultSet對象向ArrayList對象為集合的對象的轉化 //Para:sql
指定的查詢Sql //Para:className
Sql相對應得JavaBean/FormBean類的名字 //Return:以類className為一條記錄的結果集
完成ResultSet對象向ArrayList對象為集 //合的className對象的轉化 ////////////////////////////////////////////////////////////////////////////// public ArrayList Select(String sql
String className){ ArrayList paraList=new ArrayList(); try{ if (conn == null){ Connection(); } PreparedStatement stmt = conn
prepareStatement(sql); ResultSet rs = stmt
executeQuery(); String recordValue=
; Object c
=null; paraList=new ArrayList(); ResultSetMetaData rsmd = rs
getMetaData(); int columnCount = rsmd
getColumnCount(); while (rs
next()){ c
=Class
forName(className)
newInstance(); for (int i=
; i<=columnCount; i++) { if(rs.getString(rsmd.getColumnName(i))!=null){ recordValue=rs.getString(rsmd.getColumnName(i)); }else{ recordValue=""; } Method m=c1.getClass().getMethod(getSetMethodName(rsmd.getColumnName(i)), new Class[]{recordValue.getClass()}); m.invoke (c1, new Object[]{recordValue}); } paraList.add(c1); } }catch(SQLException ex){ }catch(ClassNotFoundException e){ }catch(NoSuchMethodException e) { }catch(InvocationTargetException e){ }catch (IllegalAccessException e){ }catch(InstantiationException e){ } finaly{ closeConnection(); return paraList; } } 3、 在JavaBean封裝的商業邏輯中調用Select 方法,然後在JSP頁面上顯示出來: //Function:取得用戶列表 //Para: //Return:返回用戶列表 ///////////////////////////////////////////////////////////////////////////// public ArrayList getUsers(){ ArrayList ret=null; DatabaseManage db=new DatabaseManage(); String sql=" select usr_id,usr_name " +" from users " ; ret=db.Select(sql," com.bhsky. webis.system.UsersActionForm"); return ret; } 4、 在Action的execute方法中調用getUsers()方法: public ActionForward execute( ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse httpServletResponse) { /**@todo: complete the business logic here, this is just a skeleton.*/ UsersActionForm uaf=(UsersActionForm)actionForm; SystemService ubb=new SystemService(); ArrayList userList=ubb.getUsers(); request.setAttribute("userList",userList); ActionForward actionForward=actionMapping.findForward(url); return actionForward; } 5、 在JSP中顯示: 用戶ID 姓 名
四、結語: 我們通過運用類反射機制,在一個Struts應用開發中,完成了一個通用查詢方法的實現。tw.WIngWit.cOm它使得程序員擺脫了在每個應用程序中都要編寫枯燥的set、get等方法來訪問ActionForm Bean,從而簡化了Struts應用程序的開發。
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28348.html