`

两个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>
即可

分享到:
评论

相关推荐

    struts2 action跳转action传参数

    - `${param1}&lt;/param&gt;` 和 `${param2}&lt;/param&gt;`:这两个参数将在action2中被设置。 - **注意事项**: - `param1`和`param2`需要在action1中定义对应的getter和setter方法,以便能够获取到这些参数值。 - 如果只...

    android两个APK相互调用并传参数

    下面我们将深入探讨如何实现两个APK间的交互以及参数传递。 首先,理解Intent的基本构造。Intent分为显式Intent和隐式Intent。显式Intent明确指定了要启动的目标组件,通常用于在同一应用内的组件间通信;而隐式...

    多action之间跳转传参问题

    在开发Java Web应用程序时,尤其是使用Struts2或者Spring MVC等MVC框架时,我们经常需要在多个Action之间进行跳转并传递参数。这在构建动态、交互性强的Web应用中是必不可少的。本项目旨在演示如何在自定义的Action...

    js单选按钮和向action中传多个参数

    这里,`id`和`path`是需要传递给`inExcel.action`的两个参数。需要注意的是,在实际应用中,参数值应该进行适当的编码处理,以避免特殊字符导致的问题。可以使用`encodeURIComponent()`函数来确保安全。 ```...

    C#动态调用DLL并对目标函数传递参数

    // 假设目标函数为无返回值,接受两个整数参数 delegateType = typeof(Action, int&gt;); Delegate methodDelegate = Delegate.CreateDelegate(delegateType, methodInfo); ``` 5. **执行方法**:现在我们可以使用委托...

    js的form表单提交url传参数(包含+等特殊字符)的两种解决方法

    这种方法通过JavaScript动态创建一个form元素,将需要提交的参数值编码后加入到表单的action属性中,然后模拟form的提交行为。示例代码如下: ```javascript linkredwin=function(A,B,C,D,E,F,G){ var formredwin=...

    如何可以同時传递两个参数

    ### 如何同时传递两个参数 在.NET Web应用程序开发过程中,经常会遇到需要向服务器端代码或方法传递多个参数的情况。例如,在页面加载事件或用户触发的其他事件中,可能需要传递多个值以完成某些操作。这种情况下,...

    C# 调用函数时动态获取参数名称和值

    然而,要动态获取参数名称和值,我们需要利用反射(Reflection)和表达式树(Expression Trees)这两个强大的工具。 **反射(Reflection)**是.NET框架的一个特性,它允许程序在运行时检查自身的信息,如类型、属性...

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

    在文章中的TestController中,作者定义了一个名为Test的方法,它接收两个字符串类型的参数date和id,并将这两个值存储在ViewData中,以便在视图中展示。在Test.cshtml页面中,使用ViewData来获取并显示传递的参数值...

    软件测试QTP中action之间的参数传递应用实例详解

    在拆分过程中,每次第二个Action的Name将成为新生成的第一个Action的Name。 完成拆分后,主Action(main)的脚本将包含运行其他Action的语句,如`RunAction "log_in", oneIteration`,这里的`oneIteration`参数表示...

    jquery.ajax 传参数到mvc的action

    例如,如果你有一个名为`SaveData`的Action,接收两个参数`id`和`name`: ```csharp [HttpPost] public ActionResult SaveData(int id, string name) ``` 那么在jQuery中,你可以这样设置data: ```...

    Android 多个service的action 相同冲突 验证demo

    在这个项目中,开发者可能创建了两个或更多的Service,它们都声明了相同的ACTION,并在启动这些Service时展示了不同策略的应用。 在阅读和分析这个示例项目时,你可以查看以下几个关键点: - Service的...

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

    但这会导致错误,因为commit只接受两个参数。第一个参数是mutation的名称,第二个参数则是任何其他的参数,它将被直接传递给mutation函数。当尝试传递多个参数时,就会引发错误。 ### 解决方案 为了解决这个问题,...

    C#中Action和Func的区别

    在C#编程语言中,Action和Func是两个非常重要的委托类型,它们被广泛用于方法的传递和回调。了解它们的区别对于编写高效、灵活的代码至关重要。让我们深入探讨这两个概念及其差异。 1. **Func委托** `Func, T2, .....

    从js向Action传中文参数出现乱码问题的解决方法.docx

    以下是一些关于如何解决从JS向Action传中文参数出现乱码问题的详细方法和注意事项: 首先,确保整个项目的编码一致性是至关重要的。在项目配置中,包括HTML、JSP、CSS、Java、XML等文件,都应统一采用UTF-8编码格式...

    Javascript传递参数到action类,多个字符传递

    在给定的代码片段中,`functionlistQuery()` 和 `functionpageQuery(pageNo)` 这两个函数展示了如何在JavaScript中通过修改`window.location.href`属性来构建一个包含多个查询参数的URL。这里的关键在于使用了字符串...

    自定义Action实现Action接口(实现简单登录功能)

    在Struts2的配置文件(通常为`struts.xml`)中,你需要定义这个Action及其关联的结果: ```xml &lt;action name="login" class="com.example.LoginAction"&gt; &lt;result name="success"&gt;/success.jsp ...

    biee 参数接收方法

    - `bet`:介于(需要两个参数,如 `P3`) 在处理包含空格的表名或字段名时,需要使用 `%20` 替换空格。例如,`Measures."Dollar Sales"` 应该写成 `Measures."Dollar%20Sales"`。 对于传递参数,最好使用英文或...

Global site tag (gtag.js) - Google Analytics