问题描述
struts1+spring+ibatis整合,都配置好了,可是老报错说找不到方法struts1的配置<action name="timePlanForm" path="/TimePlan"type="org.springframework.web.struts.DelegatingActionProxy" scope="request"parameter="cmd"><forward name="add" path="/TimePlan.do?cmd=showTimePlan"></forward><forward name="show" path="/jsp/timeplan/index.jsp"></forward><forward name="showList" path="/jsp/timeplan/timePlanList.jsp"></forward><forward name="error" path="/error.jsp"></forward></action>是spring的配置<bean name="/TimePlan"class="com.talkweb.analyseInfo.web.struts.action.TimePlanAction"><property name="timePlan"><ref bean="proxytimePlanService"/></property></bean>action的代码public class TimePlanAction extends DispatchAction {private ITimePlan timePlan;private TimePlanBean timePlanBean;protected ActionForward showTimePlan(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception {System.out.println("---------- show -------------");List list = timePlan.getAllTimePlansYear();if (list != null) {HttpSession session = request.getSession();session.setAttribute("timePlanList", list);return mapping.findForward("show");} elsereturn mapping.findForward("error");}}web.xml里面配置的是.do结尾的访问action使用这个访问地址:http://localhost:8080/analyseInfo/TimePlan.do?cmd=showTimePlan错误代码:java.lang.NoSuchMethodException: com.talkweb.analyseInfo.web.struts.action.TimePlanAction.showTimePlan(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:1605)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:106)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:77)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Thread.java:619)
解决方案
java.lang.NoSuchMethodException: com.talkweb.analyseInfo.web.struts.action.TimePlanAction.showTimePlan(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 可能是你的Action里的方法签名和它要求的不一致。好好检查一下,或者把struts的Action类里面的execute的方法拷贝过来,再改名字。