- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chain:基本用途是构造成一条动作链。前一个Action将控制权转交给后一个Action,而前一个Action的状态在后一个Action里仍然保持着。我现在有一个场景,FirstAction 通过chain的方式,将控制权交给 SecondAction。FirstAction对应的页面代码为first.ftl,SecondAction对应的页面代码为second.ftl。假设我们的FirstAction如下定义:public?class?SecondAction?extends?ActionSupport{?private?CustomUser?user?=?null;?public?String?execute()?throws?Exception?{?//?利用user做事情或显示在页面上?}?//?getter?setter}意思很明确了,通过first.ftl的输入,到DB中或其他,生成了我们的CustomUser对象,这个CustomUser对象将要在SecondAction使用。于是我们想到了要配置FirstAction 的 name为toSecond的 Result type为 chain,将 生成的CustomUser对象传递到 SecondAction中,我们也这样做了,但是 经过调试,发现在SecondAction中没有得到 FirstAction中的CustomUser对象。SecondAction是这样实现的:public?class?SecondAction?extends?ActionSupport{?private?CustomUser?user?=?null;?public?String?execute()?throws?Exception?{?//?利用user做事情或显示在页面上?}?//?getter?setter}看一下ChainingInterceptor.java的实现,发现有这样的注释:An?interceptor?that?copies?all?the?properties?of?every?object?in?the?value?stack?to?the?currently?executing?object.在 FirstAction 中CustomUser user 并没有在 value stack 中,所以没有拷贝到SecondAction中。知道了问题所在,就要解决。首先是想换一种方式去做,将我们要传递的参数通过 其他 Result type 如redirectAction去传递。例如:result?type=redirectAction?name=toSecond?param?name=actionNameSecondAction/param?param?name=methodexecute/param?param?name=user${user}/param/result但这样做的缺点是,1.我们要在浏览器上看到很长很乱的URL(如果超过URL长度限制那就更悲剧了)。2.暴露这些参数总感觉很不爽。3.自定义的对象不能用这种方式传递,要么传String、或JsonObject等。另外一个解决办法:因为Result type为chain时,在执行SecondAction时,它的上一个Action,也就是FirstAction的实例并没有被销毁,FirstAction的实例被加入到了ValueStack中。所以,实现的思路就是,增加一个拦截器,在执行Actioin前判断一下,当前Action是否需要从前面的Action实例中获取数据。这个可以通过注解的方式告诉拦截器,当前的action需要什么样的对象。思路明确了,来看看代码:注解类:ChainTransParam.javaimport?java.lang.annotation.Documented;import?java.lang.annotation.ElementType;import?java.lang.annotation.Retention;import?java.lang.annotation.RetentionPolicy;import?java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic?@interface?ChainTransParam?{?String?fieldName()?default?;}拦截器实现:ChainParameterInterceptor.java/**?*?Result?type?为chain时?可通过注解的方式实现参数
您可能关注的文档
- 培养小学生学习兴趣和良好学习习惯养成”.doc
- 培养小学低年级学生学习数学兴趣的方法.doc
- 培养小学低年级说话.doc
- 培养小学生合作交流能力.doc
- 培养小学生写作兴趣的研究.doc
- 培养小学低段语文童话课文阅读能力的实践研究.doc
- 培养小学生数学学习迁移能力的.doc
- 培养小学生数学思维训练的几种方法.doc
- 培养小学生数学基本活动经验的研究.doc
- 培养小学生数学阅读能力经验交流合辑.doc
- 保定幼儿师范高等专科学校《继电保护》2023-2024学年第一学期期末试卷.doc
- 上海闵行职业技术学院《现代控制理论》2023-2024学年第一学期期末试卷.doc
- 上海第二工业大学《电力工程基础》2023-2024学年第一学期期末试卷.doc
- 六安职业技术学院《典型零件工艺流程及工艺方法设计》2023-2024学年第一学期期末试卷.doc
- 2025年南川区建筑涂料项目可行性研究.pptx
- 2025年马路标线漆项目可行性研究申请.pptx
- 伊春职业学院《电路实验》2023-2024学年第一学期期末试卷.doc
- 北京体育职业学院《电工电子基础A》2023-2024学年第一学期期末试卷.doc
- 北京邮电大学世纪学院《电机与拖动》2023-2024学年第一学期期末试卷.doc
- 北京建筑大学《数字电路实验》2023-2024学年第一学期期末试卷.doc
文档评论(0)