package com.coderising.litestruts; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author greenhills * @version 创建时间:2017年2月27日 下午11:48:56 * */ public class DefaultAction { private ActionMapping actionMapping; private Object targetAction; //由DefaultAction反射调用的目标对象 //构造方法,实例化对象 public DefaultAction(ActionMapping actionMapping) { this.actionMapping = actionMapping; //实例化对象 try { this.targetAction = Class.forName(this.actionMapping.getClassName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } } /** * 初始化参数 * DefaultAction.java * @param * @author greenhills * 2017年2月27日 下午11:58:05 */ public void initParam(Map<String,String> parameters){ Class clazz=this.targetAction.getClass(); Set<String> keys=parameters.keySet(); try { for(String key:keys){ String _key = getFirstUpper(key); //调用set方法赋值 Method method=clazz.getDeclaredMethod("set"+_key,clazz.getDeclaredField(key).getType()); method.invoke(this.targetAction, parameters.get(key)); } } catch (Exception e) { e.printStackTrace(); } } /** * 调用实例方法 * DefaultAction.java * @param @return * @author greenhills * 2017年2月27日 下午11:53:56 */ public String runMethod(){ String methodName=this.actionMapping.getMethod(); Class clazz=this.targetAction.getClass(); String result="success"; //调用set方法赋值 try { Method method=clazz.getDeclaredMethod(methodName); result = (String) method.invoke(this.targetAction); } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取action字段的值 * DefaultAction.java * @param @param fields * @param @return * @author greenhills * 2017年2月28日 上午12:39:01 */ public Map<String,Object> getFieldValue(String[] fields){ Map<String,Object> result=new HashMap<String, Object>(); try { Class clazz=this.targetAction.getClass(); for(String field:fields){ String _field = getFirstUpper(field); //调用get方法获取值 Method method=clazz.getDeclaredMethod("get"+_field); result.put(field,method.invoke(this.targetAction)); } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 将首字母改为大写 * DefaultAction.java * @param @param val * @param @return * @author greenhills * 2017年2月28日 上午12:24:34 */ private String getFirstUpper(String val){ return val.substring(0, 1).toUpperCase()+val.substring(1); } public ActionMapping getActionMapping() { return actionMapping; } public void setActionMapping(ActionMapping actionMapping) { this.actionMapping = actionMapping; } public Object getTargetAction() { return targetAction; } public void setTargetAction(Object targetAction) { this.targetAction = targetAction; } }