在做SSH开发中struts是交给spring管理的  <controller  processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>
  
  <message-resources parameter="com.hdq.struts.ApplicationResources" />
  
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"  value="WEB-INF/classes/applicationContext.xml"/>
  </plug-in>

在struts-config.xml的action配置
  
    <action
      attribute="adminuserForm"
      input="/jsp/errors.jsp"
      name="adminuserForm" 
      parameter="mysta"
      path="/jsp/admin/adminUser"
      scope="request"
      type="com.hdq.struts.action.AdminUserAction" >
      <forward name="listuuu" path="/jsp/admin/a.jsp"></forward>
   </action>
在applicationContext.xml中的配置
   <bean name="/jsp/admin/adminUser"
          class="com.hdq.struts.action.AdminUserAction">
   </bean>
   这是一个小的项目我做着练手用的中间可长时间没做了!最近有空我从新做,三天不练手生我是深有体会啊!为了少出错我在action中没有调用任何业务逻辑:
     public class AdminUserAction extends DispatchAction {
       public ActionForward listtest(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) 
{
return mapping.findForward("listuuu");
}
      }
    只是用SSH框架跳转,想通过后再添加业务逻辑
   在/jsp/admin/adminuser.jsp中有
   <a href="adminUser.do?mysta=listtest" target="right">用户管理&nbsp;</a>  
   一个超练级
   可服务器一运行起来就点击超链接就报错2009-07-03 09:29:56,953 ERROR [org.apache.struts.actions.DispatchAction] - Action[/jsp/admin/adminUser] does not contain method named 'listtest'
java.lang.NoSuchMethodException: com.hdq.struts.action.AdminUserAction.listtest(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.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.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.hdq.filter.EncodingFilter.doFilter(EncodingFilter.java:25)
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:128)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
2009-07-03 09:29:56,968 WARN [org.apache.struts.action.RequestProcessor] - Unhandled Exception thrown: class java.lang.NoSuchMethodException
2009-7-3 9:29:56 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NoSuchMethodException: Action[/jsp/admin/adminUser] does not contain specified method (check logs)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:264)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
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.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.hdq.filter.EncodingFilter.doFilter(EncodingFilter.java:25)
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:128)
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:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

    在action中明明是有listtest方法的,但服务器就不通过
    在最开始的时候我遇到的更郁闷点击超链接就是不跳转而且还不报错后来我代码重新写了就这样了
    还用我在action中写了个静态数据块来测试action是否执行但测试结果是action没有执行过!
    
   实在郁闷毁了!我怎么也找不出原因!希望高手们尽快帮帮忙!
   小弟先谢过了

解决方案 »

  1.   

    你用的是 DispatchAction ,你好好检查你的方法和参数看看
      

  2.   

    DispatchAction类:
    package com.hdq.struts.action;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;
    import com.hdq.struts.form.AdminUserForm;/** 
     * MyEclipse Struts
     * Creation date: 07-02-2009
     * 
     * XDoclet definition:
     * @struts.action path="/adminUser" name="adminUserForm" input="/form/adminUser.jsp" parameter="status" scope="request" validate="true"
     */
    public class AdminUserAction extends DispatchAction {

    public ActionForward listtest(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) 
    {
    return mapping.findForward("listuuu");
    }
    // public ActionForward execute(ActionMapping arg0, ActionForm arg1,
    // HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
    // System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
    // return arg0.findForward("listuuu");
    // }
    }
      

  3.   

    找不到'listtest' 这个方法
    还有你确定你的Action是交给Spring管理了么..
    action 
          attribute="adminuserForm" 
          input="/jsp/errors.jsp" 
          name="adminuserForm" 
          parameter="mysta" 
          path="/jsp/admin/adminUser" 
          scope="request" 
          type="com.hdq.struts.action.AdminUserAction" > 
          <forward name="listuuu" path="/jsp/admin/a.jsp"> </forward> 
      </action>是不是应该换成type="org.springframework.web.struts.DelegatingActionProxy"  这样才是将请求交给Spring
      

  4.   


    <controller  processorClass="org.springframework.web.struts.DelegatingRequestProcessor"> </controller> 
    action不就交给Spring了吗!
    你说的方法我试过也不行!
    真的很郁闷
      

  5.   

    你的type配置错误了吧
    要么配置spring的类
    要么配置bean的name
    你的两个都不是
    他到哪里去找呢
      

  6.   

    你先把 type="org.springframework.web.struts.DelegatingActionProxy"  改好, 
     之后你把 Spring中的<bean name="/jsp/admin/adminUser" class = "...."/> 注意要是name属性 不是id 
     再试试吧  要么就可能是版本有问题了
      

  7.   

    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:beans.xml</param-value>
    </context-param>

    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    web.xml配置下这个看看
      

  8.   

    你的action打断点能进去不?
    进不去就是,你让spring托管的时候有错误,你按13楼的看看 他的托管对着呢!你的问题就是配置不对!
      

  9.   

    在做SSH开发中struts是交给spring管理的 
    是不是要写个代理类啊,然后在通过ACTION名称和SPRING中Bean名称一样。然后才能依赖注入啊。
      

  10.   

    <a href="adminUser.do?mysta=listtest" target="right">
    这句里面应该是path="/jsp/admin/adminUser" 里面的jsp/admin/adminUser.do吧