在struts2中,为什么当我们自定义一个action,只要继承了actionSupport了,就可以改变那个方法的名字?按照java的特性,自定义的action的方法名,应该是和父类actionSupport中的execute()方法一样啊?子类只是重写父类的execute()方法,名称应该不可以改变啊?各位高手,请解释一下,原因是什么啊?

解决方案 »

  1.   

    struts2中并没有硬性规定请求调用的方法为execute(),只要方法返回的是一个String就能调用。而一般情况使用execute()是因为大多数人是重struts中转过来的,遵循了struts的习惯。请求具体调用哪个方法,是在配置文件中配置的。
    另外补充一点,struts2中的action不需要继承任何类或任何接口就能调用,但actionSupport中提供了一些常用功能,继承它以后可以省点编码量
      

  2.   

    你大概还没完全熟悉struts2,execute只是父类的一个方法而已,你可以在你的Action里写N个自定义名字的方法而不需要去理会父类中的方法名,execute方法跟其他自定义方法的一个小的区别就是,你在struts.xml配置文件中,例如<package name="p" extends="struts-default" namespace="/">
    <action name="actionName" class="MyAction">
       <result>/index.jsp</result>
    </action>访问"MyAction"时只需要用"/actionName"这个路径来访问,但是你若自定义了一个方法,如"update"public String void update(){
       return SUCCESS;
    }你有几种访问此方法的办法:
    1.使用这样的访问路径:/actionName!update;2配置struts.xml
    <action name="up" class="MyAction" method="update">
       <result>/index.jsp</result>
    </action>访问路径:/up
      

  3.   


    不可能一个Action类里只定义一个方法 execute的方式过时了 
      

  4.   

    你并不太了解Strus2吧,Struts2的action如果一个普通类POJO,不继承者Struts2的任何类、接口,但只要有execute(),那么这个POJO也就是个Action
      

  5.   


    就是这个,struts2中Action中的写法,你好好看看
      

  6.   

    之前没有继承ActionSupport,但是加上继承了之后No result defined for action com.wb.action.loginAction and result success有错误啊