基于struts2 result type为chain 的action之间数据传递

基于struts2 result type为chain 的action之间数据传递

ID:36228719

大小:41.75 KB

页数:8页

时间:2019-05-07

基于struts2 result type为chain 的action之间数据传递_第1页
基于struts2 result type为chain 的action之间数据传递_第2页
基于struts2 result type为chain 的action之间数据传递_第3页
基于struts2 result type为chain 的action之间数据传递_第4页
基于struts2 result type为chain 的action之间数据传递_第5页
资源描述:

《基于struts2 result type为chain 的action之间数据传递》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、chain:基本用途是构造成一条动作链。前一个Action将控制权转交给后一个Action,而前一个Action的状态在后一个Action里仍然保持着。我现在有一个场景,FirstAction通过chain的方式,将控制权交给SecondAction。FirstAction对应的页面代码为first.ftl,SecondAction对应的页面代码为second.ftl。假设我们的FirstAction如下定义:public class SecondAction extends ActionSupport{  

2、  private CustomUser user = null;    public String execute() throws Exception {        // 利用user做事情或显示在页面上    }    // getter setter}意思很明确了,通过first.ftl的输入,到DB中或其他,生成了我们的CustomUser对象,这个CustomUser对象将要在SecondAction使用。于是我们想到了要配置FirstAction的name为toSecond的Resultty

3、pe为chain,将生成的CustomUser对象传递到SecondAction中,我们也这样做了,但是经过调试,发现在SecondAction中没有得到FirstAction中的CustomUser对象。SecondAction是这样实现的:public class SecondAction extends ActionSupport{    private CustomUser user = null;    public String execute() throws Exception {      

4、  // 利用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中CustomUseruser并没有在valuestack中,所以没有拷贝到Secon

5、dAction中。知道了问题所在,就要解决。首先是想换一种方式去做,将我们要传递的参数通过其他Resulttype如redirectAction去传递。例如:    SecondAction    execute    ${user}

6、ult>但这样做的缺点是,1.我们要在浏览器上看到很长很乱的URL(如果超过URL长度限制那就更悲剧了)。2.暴露这些参数总感觉很不爽。3.自定义的对象不能用这种方式传递,要么传String、或JsonObject等。另外一个解决办法:因为Resulttype为chain时,在执行SecondAction时,它的上一个Action,也就是FirstAction的实例并没有被销毁,FirstAction的实例被加入到了ValueStack中。所以,实现的思路就是,增加一个拦截器,在执行Actioin前判断一下,

7、当前Action是否需要从前面的Action实例中获取数据。这个可以通过注解的方式告诉拦截器,当前的action需要什么样的对象。思路明确了,来看看代码:注解类:ChainTransParam.javaimport java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPo

8、licy;import java.lang.annotation.Target;@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ChainTransParam {    String fieldName() default "";}拦截器实现:ChainParamete

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。