本人最近在学习框架知识,用Struts2+Spring+Hibernate做了一个网上商城的后台管理,其中遇到了一个问题,大体是这样的:当页面提交了admin/order!add后,在Action中执行add(),和getConsignee_Message(),导致在下个页面调用getConsignee_Message()时报Hibernate: select product_se0_.id as id3_0_, product_se0_.name as name3_0_, product_se0_.intro as intro3_0_, product_se0_.type_order as type4_3_0_, product_se0_.auditing as auditing3_0_, product_se0_.date as date3_0_, product_se0_.first_type_id as first7_3_0_ from t_product_second product_se0_ where product_se0_.id=?
4 1111.0 11
$$$$$$$$1
2009-10-29 10:43:12 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
严重: Could not find action or result
No result defined for action com.webshop.action.OrderAction and result input 
。。希望有人能指点指点我!!!!代码如下:struts的配置
<struts>
 <!-- 整合Spring -->
 
  <constant name="struts.objectFactory" value="spring" /> <constant name="struts.devMode" value="true" />
 <constant name="struts.ui.theme" value="simple" />
 <constant name="struts.i18n.encoding" value="UTF-8" /> 
 <constant name="struts.configuration.xml.reload" value="true"/>
 
 <!-- 上传大小, 5M -->
 <constant name="struts.multipart.maxSize" value="5242880"/>
 <package name="admin" namespace="/admin" extends="struts-default">
  <global-results>
   <result name = "noSession">/login.jsp</result>
  </global-results>
        。       
       <action name="order" class="OrderAction">
         <result name="change">/WEB-INF/admin/order_change_product.jsp</result>
         <result name="address">/WEB-INF/admin/order_address.jsp</result>
         <result name="collect">/WEB-INF/admin/order_ok.jsp</result>
       </action>
       
    </package>
    
    </struts>
web.xml配置<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
     <param-name>encoding</param-name>
     <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
     <param-name>forceEncoding</param-name>
     <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
    
  
  <!-- Struts2 配置 -->
     <filter>
        <filter-name>struts-prepare</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
         <param-name>actionPackages</param-name>
         <param-value>com.webshop.action</param-value>
        </init-param>
        
    </filter>
    <filter-mapping>
        <filter-name>struts-prepare</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
   
    
   <!-- Spring 配置 -->
   <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:applicationContext-*.xml</param-value>
  </context-param>
   
   <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   
  
  <filter>
    <filter-name>hibernateFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
 <filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping> 
页面代码:<body>
  <form action="admin/order!add" method="post">
   。
  </form>
 </body>
Action代码:public String getConsignee_Message() throws Exception {
....
  return "collect";
 }
 
 public String add() throws Exception {
 ....
  
  return "address";
 }

解决方案 »

  1.   

    你可以在add方法里面调用getConsignee_Message()方法啊
      

  2.   

    我的意思是:一个模块一个action,每个请求根据不同的方法名,去action里找!!现在它就是一个请求,在action里执行了二个方法!!!
      

  3.   

    admin/order!add这样只能调你的add方法, 你可以在add方法中再调getConsignee_Message()它嘛 严重: Could not find action or result 
    No result defined for action com.webshop.action.OrderAction and result input 错误说的是你struts.xml中配置的result没有input的    
      

  4.   

    我语言表达有点笑问题!!!
    不好意思!!我再说下吧!!我程序的原意是,a.jsp有个请求admin/order!add ,在action里执行完add()后,返回b.jsp页面,再在这个b.jsp页面发送另一个请求admin/order!getConsignee_Message,在action里执行getConsignee_Message()!!现在的程序,在a.jsp页面请求执行add()方法后就执行了getConsignee_Message()。然后执行return“address”,跳转到b.jsp页面,在b.jsp页面发送admin/order!getConsignee_Message请求时,就没执行时struts2 源码中DefaultActionInvocation类的invoke()里的“resultCode = invokeActionOnly();”所以才会有那个异常!!!我不知道这是为什么???望大家帮帮忙!!这个问题折磨我三天了!!!
      

  5.   

    第二个方法getConsignee_Message()就一个打印语句,和return;
    public String getConsignee_Message() throws Exception {
    System.out.println("$$$$$$$$"+orders.size()); return "collect";
    }