使用struts 框架中 DispatchAction 的时候 如果不小心将 execute 方法重写了就会发现 DispatchAction不起作用.了.我个人认为这应该算是struts框架的一个小小的bug .我们可以利用java的反射机制自定义 DispatchAction来解决这一问题.
代码:
struts-config.xml:
<action attribute="calculateForm" input="/calculate.jsp" name="calculateForm" path="/calculate" parameter="op" scope="request" type="com.cao.struts.action.CalculateAction" > <forward name="success" path="/ok.jsp" /> </action>
类代码:
package com.cao.struts;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
public class MyDispatchAction extends DispatchAction {
public final ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request ,HttpServletResponse response){
String op = request.getParameter("op");//获取方法名。
Class cal = this.getClass(); //得到类对象
Object forward = null;
try {
Method method = this.getMethod(op);
forward = method.invoke(this, new Object[]{mapping,form,request,response});//反射调用方法
} catch (Exception e) {
e.printStackTrace();
}
if(forward!=null){
return (ActionForward)forward;
}
return null;
}
}
通过上面的类 使自己的Action从 MyDispatchAction 继承.就可以 由于该类中的 execute方法是final 的所以子类是不可能覆盖的.
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/caoyinghui1986/archive/2008/04/01/2234768.aspx