科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道类反射简化Struts应用程序的开发

类反射简化Struts应用程序的开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  一、Struts中引入ActionForm类的意义与缺陷:   在Struts应用程序中,ActionForm是一个很重要的概念,它的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。

作者:中国IT实验室 来源:中国IT实验室 2007年9月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)


  三、如何应用类反射机制简化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应用程序的开发。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章