如何實(shí)現(xiàn)javabean的屬性拷貝_JSP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:JSF和Struts框架的錯(cuò)誤控制與封裝處理
      在struts中,通常采用的全局錯(cuò)誤控制模式是構(gòu)建一個(gè)baseAction,在其execute方法中完成前臺(tái)傳回方法的dispatch操作,并由 try……catch……捕獲程序錯(cuò)誤,實(shí)現(xiàn)錯(cuò)誤的控制和展示。一個(gè)典型的B

      在struts的實(shí)踐過程中,經(jīng)常兩個(gè)javabean交換數(shù)據(jù)的情況,如ActionForm與數(shù)據(jù)庫中的表相關(guān)的bean交換數(shù)據(jù)。通常情況下要寫很多get和set語句,一個(gè)個(gè)屬性依次拷貝。這樣的話,如此重復(fù)繁重的工作讓程序員感覺不到編程的快樂。于是在網(wǎng)上查相關(guān)資料知,在apache.org有一個(gè)project:common-beanutil,提供的一個(gè)BeanUtil類,這個(gè)類有一個(gè)靜態(tài)方法BeanUtil.copyProperties()實(shí)現(xiàn)了該功能。后來我在與java相關(guān)的書上知道的java的反射機(jī)制(reflect),償試著并實(shí)現(xiàn)了兩個(gè)javabean的屬性拷貝功能。

      import java.lang.reflect.*;
      public class BeanUtil2{
      /**
      @parameter Object obj1,Object obj2
      @return Object
      用到反射機(jī)制
      此方法將調(diào)用obj1的getter方法,將得到的值作為相應(yīng)的參數(shù)傳給obj2的setter方法
      注意,obj1的getter方法和obj2方法必須是public類型
      */
      public static Object CopyBeanToBean(Object obj1,Object obj2) throws Exception{
      Method[] method1=obj1.getClass().getMethods();
      Method[] method2=obj2.getClass().getMethods();
      String methodName1;
      String methodFix1;
      String methodName2;
      String methodFix2;
      for(int i=0;i methodName1=method1[i].getName();
      methodFix1=methodName1.substring(3,methodName1.length());
      if(methodName1.startsWith("get")){
      for(int j=0;j methodName2=method2[j].getName();
      methodFix2=methodName2.substring(3,methodName2.length());
      if(methodName2.startsWith("set")){
      if(methodFix2.equals(methodFix1)){
      Object[] objs1=new Object[0];
      Object[] objs2=new Object[1];
      objs2[0]=method1[i].invoke(obj1,objs1);
      /**
      激活obj1的相應(yīng)的get的方法,objs1數(shù)組存放調(diào)用該方法的參數(shù),
      此例中沒有參數(shù),該數(shù)組的長度為0
      */
      method2[j].invoke(obj2,objs2);
      //激活obj2的相應(yīng)的set的方法,objs2數(shù)組存放調(diào)用該方法的參數(shù)
      continue;
      }
      }
      }
      }
      }
      return obj2;
      }
      }
      再建一個(gè)javabean,并測試

      import java.lang.reflect.*;
      public class User {
      private String name;
      private String id;
      public void setName(String name){
      this.name=name;
      }
      public String getName(){
      return this.name;
      }
      public void setId(String id){
      this.id=id;
      }
      public String getId(){
      return this.id;
      }
      public static void main(String[] args) throws Exception{
      User u1=new User();
      u1.setName("zxb");
      u1.setId("3286");
      User u2=new User();
      u2=(User)BeanUtil2.CopyBeanToBean(u1,u2);
      System.out.println(u2.getName());
      System.out.println(u2.getId());
      }
      }
      編譯后并執(zhí)行輸出結(jié)果

      zxb

      3286

      成功!

      分享:介紹JSP中request屬性的用法
      一、request.getParameter() 和request.getAttribute() 區(qū)別 (1)request.getParameter()取得是通過容器的實(shí)現(xiàn)來取得通過類似post,get等方式傳入的數(shù)據(jù),request.setAttribute()和getAt

      來源:模板無憂//所屬分類:JSP教程/更新時(shí)間:2008-08-22
      相關(guān)JSP教程