本帖最后由 jeking217 于 2012-02-13 15:37:19 编辑 最近发现一个很灵异的事件,事情是这样的:我使用的是structI,写了一个BaseAction,所有的其他所有的action都继承这个BaseAction类,在BaseAction的execute方法中采用反射的方法,根据传入的参数,执行子类的不同方法。
类图结构如下:
BaseAction的execute方法代码如下:
@Override
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
session = request.getSession();
String thisAction = request.getParameter("act");
if (Tool.isEmpty(thisAction)) {
return mapping.findForward("error");
}
this.actionForward = null;
success = true;
try {
this.request = request;
this.response = response;
this.form = (BaseForm) form;
if (!Tool.isEmpty(thisAction)) {
Class ctrlClass = this.getClass();
Method ctrlMethod = null;
ctrlMethod = ctrlClass.getMethod(thisAction);
ctrlMethod.invoke(this);
}
} catch (Exception e) {
System.out.println("方法没找到:"+thisAction);
success = false;
}
if (!success)
forward = "error";
if (actionForward == null) {
return mapping.findForward(forward);
} else {
return actionForward;
}
}
灵异事件描述:都是访问同一个链接请求,可大部分情况下可以正常访问到,但是也会出现找不到该方法的异常,导致页面出错!!各位大师,这是什么情况,如何解决呢??
------最佳解决方案--------------------------------------------------------
你确定你这两句没写错?
ctrlMethod = ctrlClass.getMethod(thisAction);
ctrlMethod.invoke(this);
方法定义是Method getMethod(String str, Class<?>... types)
Object invoke(Object obj, Object... args)
还有就是getMethod只能获取到public的,可能你有些方法不是public的吧。可以使用getDeclaredMethod
------其他解决方案--------------------------------------------------------
abstruct 说的有道理,方法确实是public,但为什么只是偶尔出现方法找不到的异常,而大部分时间又是可以的呢!!我先试试你说的方法,修改一下!非常感谢你……