package com.coderising.litestruts; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Struts { @SuppressWarnings("unchecked") public static View runAction(String actionName, Map<String,String> parameters) throws Exception{ Class<?> viewClass = Class.forName("com.coderising.litestruts.View"); View view = (View)viewClass.newInstance(); SAXReader saxReader = new SAXReader(); Document doc = saxReader.read("src/com/coderising/litestruts/struts.xml"); Element root = doc.getRootElement(); List<Element> list = root.elements("action"); for(Element action_element : list) { if(actionName.equals(action_element.attributeValue("name"))){ String className = action_element.attributeValue("class"); Class<?> clazz = Class.forName(className); LoginAction la = (LoginAction)clazz.newInstance(); Class<?> clazz1 = la.getClass(); if(parameters.containsKey("name")){ Method m1 = clazz1.getDeclaredMethod("setName", String.class); m1.invoke(la, parameters.get("name")); } if(parameters.containsKey("password")){ Method m2 = clazz1.getDeclaredMethod("setPassword", String.class); m2.invoke(la, parameters.get("password")); } Method m3 = clazz1.getDeclaredMethod("execute"); String result = (String)m3.invoke(la); Map<String, String> map = new HashMap<String, String>(); // 这里没有通过反射,后续要改正成反射 map.put("name", la.getName()); map.put("password", la.getPassword()); map.put("message", la.getMessage()); view.setParameters(map); for(Element rusult_element : (List<Element>)action_element.elements("result")) { if(result != null && result.equals(rusult_element.attributeValue("name"))){ view.setJsp(rusult_element.getText()); break; } } break; } } return view; } }