浏览 2850 次
锁定老帖子 主题:struts中通过反射给领域对象赋值的方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-20
最后修改:2010-04-20
用struts1.x是从from里取值 然后放入一个对象 用struts2.x是从this.里取值 然后放入一个对象 然后对这个对象进行操作 代码一大串都出现在action中 非常难看 代码质量下降 总是在拷贝粘贴代码 刚写了个类解决这个问题 package com.harmony.themis.onDuty.web.action; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import com.harmony.themis.commons.web.action.BaseAction; public class ObjectSetValue { public Object getValueByAction(String returnClassName/*需要赋值的类的className*/, BaseAction baseAction/*你的action父类是谁这里就写谁 如果是自定义的这个参数类型得改 也可以是from*/) { Object obj = null; Map map = new HashMap(); Method[] methodes = null; //将action中所有方法放入到map 中 这个map只为查询是否有get方法 methodes = baseAction.getClass().getMethods(); for(Method met : methodes){ map.put(met.getName(), ""); } try { obj = Class.forName(returnClassName).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { methodes = Class.forName(returnClassName).getMethods(); } catch (SecurityException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } //循环类的所有方法 for(Method met : methodes){ //如果是set方法 if(met.getName().indexOf("set")==0){ //得到除去set的属性名 String metName = met.getName().replaceFirst("set", ""); //得到get方法的方法名 String getMetName = "get"+metName; try { //如果action中有对应的get方法 if(map.containsKey(getMetName)){ //执行类的set方法 对应action的get方法 met.invoke(obj,new Object[] {baseAction.getClass().getMethod(getMetName, new Class[]{ }).invoke(baseAction, new Class[]{ }) } ) ; } } catch (IllegalArgumentException e) { e .printStackTrace(); } catch (IllegalAccessException e) { e .printStackTrace(); } catch (InvocationTargetException e) { e .printStackTrace(); } catch (SecurityException e1) { e1.printStackTrace(); } catch (NoSuchMethodException e1) { e1.printStackTrace(); } } } return obj; } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-21
观望本贴
|
|
返回顶楼 | |
发表时间:2010-04-21
Apache的commons-beanutils包里,有个叫做BeanUtils.copyProperties的方法。
|
|
返回顶楼 | |
发表时间:2010-04-21
weiqingfei 写道 Apache的commons-beanutils包里,有个叫做BeanUtils.copyProperties的方法。
多谢提醒 还是我孤陋寡闻了 一会去看看 |
|
返回顶楼 | |
发表时间:2010-04-27
有样东西叫OGNL
|
|
返回顶楼 | |