三、如何应用类反射机制简化struts应用程序的开发:
1、 先定义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;
}
}
2、 编写通用的为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 c1=null;
paralist=new arraylist();
resultsetmetadata rsmd = rs.getmetadata();
int columncount = rsmd.getcolumncount();
while (rs.next()){
c1=class.forname(classname).newinstance();
for (int i=1; 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应用开发中,完成了一个通用查询方法的实现。它使得程序员摆脱了在每个应用程序中都要编写枯燥的set、get等方法来访问actionform bean,从而简化了struts应用程序的开发。
闽公网安备 35060202000074号