action是动作的意思,动作似乎不能来回调用吧,你可以把方法放到一个公共类里面呀
解决方案 »
- 求开发者突击Java Web主流框架整合开发一书的源码
- 学习hibernate时出现的问题
- Struts2中的tree标签问题
- Struts中页面跳转的path 问题
- struts怎么循环数值
- 高分求助java高手!windows server 2003上线程占有99%的cpu导致项目无法运行
- struts2 iterator 标签问题,如何用struts2 的标签实现以下功能?急!!!!!!!!!!!!
- java调用WCF
- 关于struts的reset()方法
- 学完JSP后,升级到XML呢,还是Struts?
- 域名指向问题weblogic
- 请问jdk1.3最高能用struts和spring版本是多少?
另外我特别想知道那些action是在哪里初始化的,为什么程序中可以直接使用action里的各种属性,但是没有见到它给这些属性初始化的代码!
有些是在框架一加载 就初始化了如mapping . 有写是在你提交表单的时候初始化的如form
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的全路径和类名,那就是你的问题了。
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的标签不能嵌套使用。
因为里面牵扯到了要用ActionForm接受参数的
关于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方法,需要删掉它