服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

类反射简化struts应用程序的开发(二)


  三、如何应用类反射机制简化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中显示:

 

 

    type="com.bhsky.webis.system.usersactionform">

 

 

  

   

用户id姓 名
property="usr_id"/> property="usr_name"/>

四、结语:

我们通过运用类反射机制,在一个struts应用开发中,完成了一个通用查询方法的实现。它使得程序员摆脱了在每个应用程序中都要编写枯燥的set、get等方法来访问actionform bean,从而简化了struts应用程序的开发。

扫描关注微信公众号