`

两个Action 动态传参数

阅读更多
       研究了近两天的时间,终于把一个很简单的问题给搞定了,那它是什么问题呢?就是Struts2的两个Action之间传参的问题。
       需求功能是这样:Action1 获取数据库配置内容,得到相应Model的 动态URL ,这里的URL 有的是Action有的是JSP页面。


        1.使用result 类型中的  redirect 类型,如下:
          <result name="success" type="redirect">${dynamicUrl}?objectId=${objectId}&param1=${param1}</result>
          这样传参才能达到Action取参数的需要,如果要是加上 :
         <param name="param1">${param1}</param>
        <param name="items">${items}</param>

          那么 param1 和 items 这两个参数都无法从目标Action里得到,如果想得到的话只能用  objectId=${objectId}&param1=${param1} 这种方式,或者用 session来实现,这样就有点复杂了,而且使用起来也相当的不方便。后来又尝试了第二种方式:
        
         2.使用result类型中的redirect-action类型  如下:
        <result name="success" type="redirect-action">
             <param name="actionName">${actionName}</param>
              <param name="namespace">${namespace}</param>
        </result>
         此时,result之间不能再设其它的自定义的参数了,因为 redirect-action对应的是  org.apache.struts2.dispatcher.ServletActionRedirectResult ,而actionName和namespace是它的两个属性,还有一个重要属性就是methodName,如果要再加其它自己定的参数,只能扩展该类了。我在此基础上,又在result 之外添加了几个param 参数,如:
      

        <param name="param1">${param1}</param>
        <param name="param2">${param2}</param>
        <result name="success" type="redirect-action">
             <param name="actionName">${actionName}</param>
             <param name="namespace">${namespace}</param>
        </result>
     但是还是不能将 param1和param2两个参数传到目标Action中。既然Struts2有这种机制,那么它就一定能够实现,两个Action的动态传参,只是我对它不了解而已,后来,我又翻出来Strut2的源码和XWork的源码,再结果网上的资料,又尝试了第三种方式,终于可以了。

  3.使用reulst 类型中chain类型 如下:

   <action name="getTemplate" class="tabAction" method="getTemplateByParas">
         <param name="objectId">${objectId}</param>
        <param name="param1">${param1}</param>
        <param name="items">${items}</param>
       
        <result name="success" type="chain">
         <param name="actionName">${actionName}</param>
         <param name="namespace">${namespace}</param>
        </result>
        
  </action>

       这样就可以实现传参了,这里的参数所有对象都可以传,包括map,List,set 等集合也可以。同时这里还需要注意一个小问题,chain这种类型是XWork中的result类型,它对应的类是:
       com.opensymphony.xwork2.ActionChainResult .   这里需要注意一个小问题, actionName,namespace都是他的属性,所以对于传过的URL参数要做一下处理。
       actionName必须是Action的名称,namespace是他命名空间,必须以"/"开头,如:
       /tab/getTemplate.action       则 namespace="/tab"   ;  actionName=”getTemplate“; 


这是小弟在使用Struts2时,遇到两个Action动态传参的问题时总结的心得,希望对个位同仁有所帮助,不当之处,请多指教。




注:<action name="getTemplate" class="tabAction" method="getTemplateByParas">
         <param name="objectId">${objectId}</param>
        <param name="param1">${param1}</param>
        <param name="items">${items}</param>
       
        <result name="success" type="chain">
         <param name="actionName">${actionName}</param>
         <param name="namespace">${namespace}</param>
        </result>
        
  </action>




可以改为

<action name="getTemplate" class="tabAction" method="getTemplateByParas">        
        <result name="success" type="chain">
           <param name="actionName">${actionName}</param>
           <param name="namespace">${namespace}</param>
        </result> 
  </action>



对于对象,1-在前面Action 和后面Action中要写 getter setter,  2-actionName,namespace 配置一定要写,否则错。

type为chain, 使两个action共享httpServletRequest, 所以不用写太多配置,有getset就能取出来



【转】

例如 在执行完action1之后要直接跳转到action2,并且action1要传一些参数给action2,在struts.xml文件中的配置如下:
        <action name="action1" method="" class="">
            <result name="success" type="chain">
                <param name="actionName">action2</param>
                <param name="param1">${param1}</param>
                <param name="param2">${param2}</param>
            </result>              
        </action>  



注意:
     1. 若param1和param2是两个变量,那么在两个action中都要有他们的getter和setter
     2. 若param1是常量,那么在action1中只要有一个param1的getter,在action2中要有param1的getter和setter   

如果在两个action之间直接跳转而不用传参数,struts.xml文件可以和上面一样,只是没有param标签,还可以使用如下配置:
    <action name="action1" method="" class="">
        <result name="success" type="redirectAction">action2.action</result>              
    </action>
即可

分享到:
评论

相关推荐

    多action之间跳转传参问题

    自己写一个多个action之间跳转的小项目,和大家共享下!

    浅谈Asp.net Mvc之Action如何传多个参数的方法

    为完成此功能,我打算在URL中传入了两个参数,一个记录此日志时间,另外一个记录日志的主键ID,因此,准备从Asp.net MVC的路由入手。 在Global.asax文件中,默认路由如下。 routes.MapRoute( Default, // 路由名称...

    vuex actions传递多参数的处理方法

    但是在actions 只是可以接收到两个参数的问题 分析 vuex actions 固定接受的第一个参数是dispatch对象 第二个参数是使用者本身定制的参数 参考 `...

    详解关于Vuex的action传入多个参数的问题

    然而commit中只能传入两个参数,第一个就是mutations,第二个就是要传入的参数 一开始遇到的问题是加入购物车方法中要传入一个字典对象里面保存产品信息item,还要传入一个产品数量的参数num 然而如果这么写的话就...

    jquery uploadify 使用总结(含传递多个参数,服务器回传值等)

    此案例只包含两个文件,前端页面和处理Action,因考虑到网上已经有了很多关于解决乱码的贴子,在此就未再做关于乱码的处理 本文件中重点关注了,服务器向页面返回值及页面向后台传递多个参数的处理,以及一些兼容性.. ...

    ThinkPHP3.1新特性之Action参数绑定

    ThinkPHP3.1版的Action参数绑定...例如,我们给Blog模块定义了两个操作方法read和archive方法,由于read操作需要指定一个id参数,archive方法需要指定年份(year)和月份(month)两个参数。 class BlogAction exten

    ASP.NET MVC传送参数至服务端详解及实例

     在控制器中,创建两个Action,第二个Action是带四个参数的方法,正常开发环境中,你有几个参数,就得写上几个参数。 在视图中,需要把用户填写或是选择的值传给Action的Post1()方法。  上面代码示例中,重点...

    java命名规范 开发规范

    开发一个Action请求的响应: 前置条件:该Action涉及的Entity及EntityName.hbm.xml已经准备好。 步骤: a. 前端页面触发Action的请求; 统一采用全路径请求,URL格式: 1&gt; basePath/web/moduleName/*_ *.action {1}...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 ...

    loadrunner性能测试工具-Runtime-Setting参数详解

    录3个Action脚本,我们只需要设置3个Block,每个Block中分别插入一个Action,设置执行次数分别为1,2,3就可以了; 另Block的properties。这里有两种选择,Sequential和Random,分别代表顺序执行/随机执行下属的...

    window.open()实现post传递参数

    在实际项目中,常常遇到这样的需求,即实现子系统页面之间跳转并在新的页面打开,我所在项目组使用的是SSH框架,所以url均为类似****.action,同时还带有两参数(系统ID与系统名称),两个参数被struts拦截后存入...

    maven3.0+struts+spring+hibernate

    这是一个简单的登录和...所以该类的所有字段会保留,这样异步访问的时候会出问题,所以需要将scope参数设置为prototype(多例),即在相应的action上添加属性:scope="prototype",这样每次调用都会新建一个action!

    ExtJs实现数据加载和提交经典代码

    在使用使用FormPanel时我们通常需要使用它的form对象来加载数据或提交数据。...doAction方法带有两个参数,其中第二个参数为从load或submit 方法传递过来的Ext.form.Action对象的配置数据(Config Options)

    基于DQN强化学习实现五子棋人机对战(完整代码python)

    五子棋神经网络用的双神经网络的方法,两个神神经网络的结构相同,分别是 Q-eval 和 Q_target. Q_eval:参数时刻更新,用于得到q表,从而选取动作。 Q_target:参数滞后,主要用于保存以前的参数。

    activity跳转华丽的过渡效果

    注意,切换方法overridePendingTransition只能在startActivity和finish方法之后调用。...j这个函数有两个参数,一个参数是第一个activity退出时的动画,另外一个参数则是第二个activity进入时的动画。

    django中的HTML控件及参数传递方法

    这个method代表方法,方法一般有两个一个是'post',一个是'get',action是提交表单到何处,可填写一个网址。不填则默认到本页面。 {%csrf_token%} 这个是django中的一个标签,用于防止恶意攻击使用,如果不加入这个...

    yg-covid-report-action::microbe: 使用 GitHub Actions 自动填报远光健康打卡

    两个参数的获取分两种情况,分别说明如下。 第一种,你有网页打卡页面的 URL 网页版打卡 URL 类似 ,则 xxx 就是 ORG_GID。 在网页中操作一次打卡后,就会在浏览器 localStorage 中留下上次打卡数据,如下图操作,...

    wxpython in action中英文合集(两份)

    #####由于过长只截取了部分######### #####由于过长只截取了部分######### 欢迎来到wxPython 19 1.1 开始wxPython ...4.2.2 调用提示和参数默认 80 4.2.3 语法高亮 81 4.2.4 Python 帮助 81 . . . . . .

    struts2的总结,适合初学者

    这两个参数与容器相关,如果想在servlet中作单元测试,则必须初始化这两个参数。 4、如果一个servlet中有很多个方法,则必须采用传递参数的形式,分解到每一个方法中。 2重构servlet 针对servlet以上的特点,我们...

    银行业务模拟

    变量total,closetime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。 两个队列和一个事件表均要用动态存储结构实现。需考虑设置离开事件,以及如何设 计第二个队列的存储结构以获得较高的效率。注意...

Global site tag (gtag.js) - Google Analytics