`

Action之间跳转传参

    博客分类:
  • java
阅读更多
       研究了近两天的时间,终于把一个很简单的问题给搞定了,那它是什么问题呢?就是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之间跳转传参问题

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

    (源码)Activity之间实现跳转和传参

    本篇将深入讲解如何利用Intent在Activity之间实现跳转和数据传递。 首先,Intent在Android中扮演着消息传递的角色,它承载着应用程序中的各种“意图”。当你想要启动一个新的Activity或者服务,或者在不同的组件间...

    intent 跳转实现activity之间传参

    在Android中,当我们想要从一个Activity跳转到另一个Activity时,就需要使用Intent来创建这个动作的请求。Intent不仅包含了目标组件的信息,还可以携带数据,使得数据能够在不同Activity之间传递。 二、Intent的...

    React_native Navigator页面跳转组件参数传递

    它允许你在不同的React组件之间进行平滑的过渡,同时支持在页面间传递数据。本篇将详细讲解如何利用`Navigator`进行页面跳转以及如何在跳转过程中传递参数。 一、安装和引入`Navigator` 首先,你需要安装`react-...

    Android开发Intent的传参页面跳转

    接下来,我们将重点讲解如何在页面之间通过Intent传递参数。 1. 创建Intent对象:在源Activity中,创建一个Intent实例,通常用`new Intent(this, TargetActivity.class)`,其中`this`代表当前Activity,`...

    android:scheme 通过uri跳转到APP应用指定Activity

    此外,为了提供更好的用户体验,我们还可以在Activity中添加错误处理,当用户未安装我们的应用时,通过`adb shell am start -W -a android.intent.action.VIEW -d "myapp://..."`命令测试URI是否能正确跳转。...

    struts2入门(传参)

    Struts2框架基于拦截器(Interceptor)模型,它通过Action类处理用户请求,再由配置文件(如struts.xml)定义请求与Action的映射关系。此外,Struts2提供了丰富的结果类型和插件支持,提高了开发效率。 2. **创建...

    Fragment跳转时传递参数及结果回传的方法(推荐)

    在多个Fragment之间传递数据是常见的操作。这里我们将详细讨论如何在Fragment间传递参数以及如何回传结果。 1. **静态方法传递参数** 在创建新的Fragment实例时,可以通过构造函数或setArguments(Bundle args)...

    asp.net页面与页面之间传参数值方法(post传值和get传值)

    form id=”form1″ runat=”server” action=”receive.aspx” method=post&gt;  ”Button1″ runat=”server” xss=removed Text=”Button”&gt;”username” runat=”server”&gt;&lt;/asp&gt;&lt;/div&gt;&lt;/form&gt; 接受asp...

    关于JSP页面间的传参问题

    ### 关于JSP页面间的传参问题 #### JSP页面间传值方法概述 在进行Web开发时,尤其是在使用Java Server Pages(JSP)技术的过程中,页面间的参数传递是一项非常重要的技能。它不仅涉及到基本的HTML知识,还涉及到...

    035_android_Activity入门和跳转

    6. Activity间跳转传参: 通过Intent可以传递数据到新启动的Activity。使用putExtra()方法添加键值对,接收方通过getExtras()获取数据。还可以通过Intent的putParcelableArrayListExtra()、putSerializableExtra()等...

    解决form中action属性后面?传递参数 获取不到的问题

    `分隔,键值对之间用`&`分隔。然而,有时候我们可能会遇到一个问题,即在`action`属性后面直接添加的参数(如`?p_id=$p_id`)在提交表单后无法在目标页面获取。 在描述的示例代码中,开发者尝试通过`GET`方法将`p_...

    android Web跳转到app指定页面并传递参数实例

    在上面的示例代码中,设置了一个名为 SecondActivity 的 Activity,并在其 intent-filter 中设置了 action、category 和 data 等信息,其中 data 中设置了 scheme、host 和 pathPrefix 等信息,以便可以接收和处理...

    struts2 向结果传参数

    在Struts2中,结果(Result)是动作(Action)执行后跳转的目标,它可以是一个JSP、Servlet或其他资源。有时我们需要在Action执行后向结果传递参数,以便在目标页面中使用这些参数来呈现数据或执行某些逻辑。本文将...

    form表单只提交数据而不进行页面跳转的解决方案

    点击submit按钮或直接回车可以将数据提交到saveReport页面,但是提交后也会跳转到saveReport页面 如何做到 将数据提交到saveReport(form的action指向)页面,但是页面又不进行跳转,即保持当前页面不变呢?...

    PHP、web前端开发-页面传参GET方法.pptx

    本话题将深入探讨页面传参中的GET方法,这是一种常见的数据传递方式,尤其适用于简单且不涉及敏感信息的数据传输。 GET方法是HTTP协议中的一个请求方法,用于从服务器获取资源。在PHP和前端开发中,GET方法常用于...

    Strutst2框架的总结

    11. **全局结果(Global Results)**:若多个Action需要跳转到同一个页面,可设置全局结果,使用`extends`关键字实现不同包之间的继承关系。 12. **动态结果集**:在`struts.xml`配置文件中,可以通过`${action的...

    SSI框架搭建

    - **Action的基本配置**:在Struts2框架中,`action`节点用于配置请求与处理类之间的映射关系。例如,一个简单的`action`配置可能如下所示: ```xml &lt;action name="helloWorld" class=...

    ssi框架搭建

    Struts2框架的核心配置文件是`struts.xml`,它定义了应用中所有Action与用户请求之间的映射关系。Action配置项在`&lt;package&gt;`元素内,每个`&lt;action&gt;`元素代表了一个具体的业务逻辑处理单元。 - **`&lt;action&gt;`元素的...

Global site tag (gtag.js) - Google Analytics