今天在JDF下面封装struts2。
由于JDF的bean 和 struts的action 不是一个东西,当然可以做在一起,但是做在一起会有耦合的问题,而且灵活性大大降低,所以就写了个简单的对象赋值的方法。
假设一个UserBean是和表映射的
有一个UserAction 是和JSP表单映射的。
这里的字段变量名字都是一样,那么我们可以写一个公用的方法,用于转换两个对象的值的对应。
代码如下,Wrap类
public class ObjectTransWrap { public static Object wrap(Object actionObj,Class OperatorAction) throws Exception, InstantiationException{ Object o = OperatorAction.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(actionObj.getClass()); PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors(); Method get = null; Method set = null; for (int i = 0; i < properties.length; i++) { try{ get = properties[i].getReadMethod(); set = o.getClass().getMethod( properties[i].getWriteMethod().getName(), new Class[]{properties[i].getPropertyType()}); }catch(Throwable a){ continue; } if(set!=null&&get!=null){ set.invoke(o, new Object[]{get.invoke(actionObj, new Object[]{})}); set = null; get = null; } } return o; }
下面我们新建两个Bean。
UserBean.java
public class UserBean{ private String name = ""; private long age = -1; public long getAge(){ return age; } public String getName(){ return name; } public void setAge( long age ){ this.age = age; } public void setName( String name ){ this.name = name; } }
UserAction.java
public class UserAction{ private String name = ""; private long age = -1; public long getAge(){ return age; } public String getName(){ return name; } public void setAge( long age ){ this.age = age; } public void setName( String name ){ this.name = name; } }
main函数
public static void main(String[] args) throws InstantiationException, Exception{ UserAction a = new UserAction(); a.setName("名字"); a.setAge(22); UserBean bean = (UserBean)wrap(a,UserBean.class); System.out.println("name="+bean.getName()); System.out.println("age="+bean.getAge()); }
输出结果是:
name=名字
age=22
两个bean的值复制成功。但是我感觉我写的上面的代码是在重复的造轮子。JDK里面貌似有这样的方法
作者keyboardsun ,转载请标明出处