action是动作的意思,动作似乎不能来回调用吧,你可以把方法放到一个公共类里面呀

解决方案 »

  1.   

    这个我也想过了,可是开始已经把要用的方法写在其中一个action里了,再单拉一个类不是麻烦么,而且我也不想配置那些xml文件,看着头痛
      

  2.   

    请问DispathAction啥意思?麻烦多讲2句吧,我实在没概念。
    另外我特别想知道那些action是在哪里初始化的,为什么程序中可以直接使用action里的各种属性,但是没有见到它给这些属性初始化的代码!
      

  3.   

    DispathAction 你可认为是可以有多个同execute方法一样功能的方法的 Action 
      

  4.   

    为什么程序中可以直接使用action里的各种属性,但是没有见到它给这些属性初始化的代码!
    有些是在框架一加载 就初始化了如mapping . 有写是在你提交表单的时候初始化的如form 
      

  5.   

    楼主还是分离出来,你要让action去完成他的角色,框架封装了一些初始化action的操作你那么用action跑不起来,以后出现别的问题你也不好处理再说,重构一下你的方法应该很简单的
      

  6.   

    楼主,如果你用的是struts2你继续往下看,如果你用struts1,就不用浪费时间了。

    action是由Struts的ObjectFactory生成并进行初始化的。
    当struts和spring结合时,这个工作是由spring 来管理,是一个叫strutsSpringObjectFactory的
    类进行管理struts的各个action。action中那些需要注入的属性也是有spring来进行注入。
    要在ActionA中使用ActionB的方法是可以的,在struts2中你可以这么做(struts1我没有用过,你可以去网上搜一下):ActionA中实例化一个ObjectFactory,调用其buildBean方法,该方法起必须的参数是actionB的全路径和类名,来得到一个ActionB的对象。然后通过反射得到ActionB中你要调用的方法。最后执行该方法。假设ActionA中调用Tester的test方法,如下:ObjectFactory factory=ObjectFactory.getObjectFactory();
    Class classType=Class.forName(com.XXX.XXX.Tester);     //通过反射得到类
    Object kk = factory.buildBean(com.XXX.XXX.Tester,null);      //得到action实例
    Method addMethod=classType.getMethod("testnew Class[]{",int.class,Integer.class});  //蓝色部分是test的参数类型
    Object result=addMethod.invoke(tester,
    new Object[]{new Integer(100),new Integer(200)}); //黄色是实参具体怎么得到actionB的全路径和类名,那就是你的问题了。
      

  7.   

    ObjectFactory factory=ObjectFactory.getObjectFactory();
    Class classType=Class.forName(com.XXX.XXX.Tester);     //通过反射得到类
    Object kk = factory.buildBean(com.XXX.XXX.Tester,null);      //得到action实例
    Method addMethod=classType.getMethod("testnew Class[]{",int.class,Integer.class});  //蓝色部分是test的参数类型
    Object result=addMethod.invoke(tester,
    new Object[]{new Integer(100),new Integer(200)}); //黄色是实参
    原来csdn的标签不能嵌套使用。
      

  8.   

    struts里的action不能之间互相调用.
    因为里面牵扯到了要用ActionForm接受参数的
      

  9.   


    关于DispatchAction,就是根据参数调用不同的方法
    下面是提交到一个action,但是调用不同的方法 
    例如 UserInfoAction 
    1、UserInfoAction 继承 DispatchAction 
    2、在 struts-config.xml 中加入 
    <action 
          attribute="userInfoForm" 
          input="/userInfo/register.jsp" 
          name="userInfoForm" 
          parameter="method" 
          path="/userInfo" 
          scope="request" 
          type="xxx.UserInfoAction"/> 
    3、在JSP页面的表单中加入隐藏表单域 
    <html:form action="/userInfo.do"> 
    <input type="hidden" name="method" value="doAddUser"> 
    ... 
    </html:form> 根据隐藏表单域的value来调用对应的方法 
    比如上面的就是调用 doAddUser 方法 
    但是要注意的是,如果原来的Action 中有execute方法,需要删掉它