在写一个模块,struts+spring+hibernate。客户端访问/hzzj/xtgl/cpsz.do?method=hzsCpszView路径,控制台报错,错误信息为:
ERROR --- DispatchAction.dispatchMethod(260) | Action[/hzzj/xtgl/cpsz] does not contain method named 'hzsCpszView'
java.lang.NoSuchMethodException: com.hope.nxfpb.struts.action.HzsCpszAction.hzsCpszView(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
at java.lang.Class.getMethod(Class.java:1581)
at org.apache.struts.actions.DispatchAction.getMethod(DispatchAction.java:347)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:255)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at
struts 配置文件:
<action path="/hzzj/xtgl/cpsz"
type="org.springframework.web.struts.DelegatingActionProxy"
parameter="method">
</action>
spring 配置文件信息:
<bean id="hzSCpszAction"
name="/hzzj/xtgl/cpsz"
class="com.hope.nxfpb.struts.action.HzsCpszAction"
scope="prototype">
</bean>
action 中的方法 :
public ActionForward hzsCpszView(HttpServletRequest request, HttpServletResponse response,ActionMapping mapping, ActionForm form) {
//...........
}
检查配置文件、检查方法名字、重启服务、清除缓存、换tomcat、用别人的机子编译执行访问、让别人帮忙调试、找技术经理调试,各种折腾,一天时间过去了,问题依旧,各种蛋碎啊!!!
我撕长裙、撕短裙、百思不得骑姐!!!
就在无奈对着屏幕发呆之余,突然感觉有点不对啊,注意看action中的这个方法
public ActionForward hzsCpszView(HttpServletRequest request, HttpServletResponse response,ActionMapping mapping, ActionForm form) {
//........... 这个是提示找不到的方法
}
public ActionForward hzsCpszAdd(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
///......这个是action中的另一个方法
}
细心的你可能已经发现了问题所在了!!
对啊!正如你发现的,两个方法的参数顺序不一样啊!
难道是这个原因,当时的我还没有意识到这个问题,就想着,唉,修改一下试试吧!
在我调整掉出错方法的参数顺序后,好了!我顿时血溅三尺!
后来才想起,这个方法是手动写的,没有注意参数的顺序了!
总结:
public ActionForward XXXX(HttpServletRequest request, HttpServletResponse response,ActionMapping mapping, ActionForm form) {
//...........
}
public ActionForward XXXX(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
//...
}
这类方法的参数顺序是必须按照:ActionMapping mapping , ActionForm form,
HttpServletRequest request, HttpServletResponse response 这个顺序来写的!
高手勿喷,这一点在平时的代码编写过程中还真没注意过,在此提醒不知道这个问题的码友吗,可要注意了!