`
hehaibo
  • 浏览: 416259 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Struts2中chain或者是重定向的传值方法

 
阅读更多
2009年04月15日 星期三 23:36

在做一个bbs时,在本页回帖,同时在本页显示数据,这时候我走了两个action,一个是插入操作,一个是查询操作,但是需要传递当前帖子的id,这时候就要传值,于是搜了下,得到了如下的方法:(其实根本不需要重定向,如果把插入和查询写在一起完全可以解决问题,有时候遇到麻烦是因为设计的不好)

<result name="success" type="redirect">list.action?id=${id}</result>

在action中定义id的get/set方法,同名

还有其他几种方法,我用时结果没问题,但是控制台报错,不知道为什么

Chain Result:
这个result调用另外的一个action,连接自己的拦截器栈和result。

* actionName (默认) - 被调用的action的名字
* namespace - 被调用的action的名称空间. 如果名称空间为空,这默认为当前名称空间
* method - 用于指定目标action的另一个方法被调用. 如果空,默认为excute方法

Redirect Action Result:
这个Result使用ActionMapperFactory提供的ActionMapper来重定位浏览器的URL来调用指定的action和(可选的)namespace. 这个Result比ServletRedirectResult要好.因为你不需要把URL编码成xwork.xml中配置的ActionMapper提供的模式. 这就是说你可以在任意点上改变URL模式而不会影响你的应用程序. 因此强烈推荐使用这个Result而不是标准的redirect result来解决重定位到某个action的情况.

* ActionName (默认) - 重定位到的action名
* namespace - action的名称空间. 如果为null,则为当前名称空间
*

Redirect Result

调用{@link HttpServletResponse#sendRedirect(String) sendRedirect}方法来转到指定的位置. HTTP响应被告知使浏览器直接跳转到指定的位置(产生客户端的一个新请求). 这样做的结果会使刚刚执行的action(包括action实例,action中的错误消息等)丢失, 不再可用. 这是因为action是建立在单线程模型基础上的. 传递数据的唯一方式就是通过Session或者可以为Ognl表达式的web参数(url?name=value)

* location (默认) - action执行后跳转的地址.
* parse - 默认为true. 如果设置为false, location参数不会被当作Ognl表达式解析.



常有这样的梦:不知何来一本似乎是无字天书,而其中的字句却是慢慢地、渐显可辨。同时现实中的自己完全能察觉这是一个梦,极怕即刻醒来,想多记取那些天外之语。但总不能如愿,醒来时还留有某些字句痕迹,再过后就全然忘却。仿佛进入的是一个太虚幻境。

1. 动态 Action:<action ../> 元素的一个前所未有的特性是,name 属性可以用通配符,class 和 method 属性中可以用 name 中的匹配参数,{0}/{1} 的形式。举两个例子说明:
    ① <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
         URL 是 registAction.action 时,会执行 LoginRegistAction 类实例的 regist() 方法
    ② <action name="*_*" class="actions.{1}Action" method="{2}">
         URL 是 Book_save.action 时,会执行 actions.BookAction 类实例的 save() 方法
   说明:{1},{2}是用来匹配 name 属性中的 *,这和正则表达式一样的,{0} 表示的完整的 name 属性值。这也是托 Struts2 的每请求产生新的 Action 的实例才能这么用的,试想一下,Struts1 是没法针对通配符来预先加载好所有的 Action 实例的。
    可由此定义一个能用的 Action,<result> 里也能用参数。
    <action name="*">
        <result>/{1}.jsp</result>
    </action>

2. 关于在 <action .../> 中使用通配符时的校验文件命名规则。校验文件的搜索规则是:
    ① <ActionClassName>-<ActionAliasName>-validation.xml              <ActionAliasName> 为 name 属性值
    ② <ActionClassName>-validation.xml
    同时有这两个文件时,后面的规则能与前面的规则叠加或覆盖,例如 ① 中有name域的校验,② 中有password域的校验,这两个文件同时存在 <ActionClassName>所在路径时,会同时校验name和password域。
    例如对于 <action name="*Action" class="com.unmi.LoginRegistAction" method="{1}">
    URL 是 registAction.action 时,会搜索校验文件 LoginRegistAction-registAction-validation.xml 和 LoginRegistAction-validation.xml。

3. 使用通配符就会涉及到 URL 与哪个 Action 匹配的问题。例如匹配有name为 "*"、"*Action"、"LoginAction" 的 <action .../>,如果 URL 与某个 Action 的 name 完全相同(如 LoginAction.action),否则按顺序来匹配,而不是按匹配度来对应。如 abcAction.action 会匹配到 "*",而不是 "*Action"。

4. 可配置默认的 Action,URL 匹配不到对应的 Action 时就用它,用 <default-action-ref ../> 配置在 <package .../> 中。

5. Struts2 支持两种 <result ../>,配置在 <action .../> 中的局部 result,配置在 <global-results .../> 中的全局 result。<result .../> 默认的 name 属性是 "success";默认的 type 属性是 "dispatcher",即使 JSP 类型。

6. <result .../> type="plaintext" 的 <result .../> 会显示页面的源文件,如果其中有中文一般会产生乱码,这时候可设置它的 charSet 属性为 "GBK",用 <param .../> 标记。

7. <result .../> 的 dispatcher 和 redirect 类型的区别就是一个是转发(带请求参数、属性、址址栏不变)和重定向(丢失请求参数、属性、重新产生请求,所以地址栏会变)。

8. redirect-action 类型是重定(不是转发)向到一个 Action 上,那么要为 <result .../> 指定两个参数 actionName 和 namespace。简写为 <result name="..." rediect-action">actionName</result>。这种类型相当于在 Struts1 中的   <forward name="..." redirect="true">/anotherAction.do</forward> 写法。当然在 Struts2 中也可以用 redirect 类型写成相同的形式。

9. 动态结果资源有两种,根据 <action .../> 的 name 属性的模式匹配后的参数和请求参数决定结果。
    ① <action name="crud_*" class="com.unmi.CrudAction" method="{1}">
            <result>/{1}.jsp</result>
         </action>
     URL 为 crud_delete.action 处理成功后会转到 delete.jsp 页。
    ② <action name="..." class="com.unmi.ShowAction">
            <result>/show${user.type}</result>
        </action>
       要在 ShowAction 的设置了属性 ${user.type}。例如 ${user.type} 设置为 "admin",就会转到 showadmin.jsp 页。

10. Struts2 的 <result .../>、<global-result .../> 意义与效果完全对应于 Struts1 的 <forward .../>、<global-forward .../> 。
分享到:
评论

相关推荐

    struts2 重定向

    总结来说,Struts2中的重定向是一种重要的URL导航技术,可以通过多种方式实现,包括`ActionRedirect`对象、`Results`配置、`ActionSupport`的`redirect()`方法和注解方式。理解并熟练掌握这些方法,对于开发高质量的...

    一个基于struts的重定向和转发实例

    在Struts中,我们通常使用`ActionRedirect`类或者在ActionSupport类中使用`redirectAction()`方法来实现重定向。 2. **转发(Forward)**:转发发生在服务器端,不会产生新的HTTP请求。服务器接收到请求后,不直接...

    struts2重定向实例源码

    在Struts2中,Action的执行结果可以被导向到不同的视图,这其中包括了"redirect"和"redirectAction"两种重定向结果类型。这两种结果类型在实际应用中有着重要的作用,特别是对于处理URL重写、防止重复提交等问题。 ...

    Struts2的三种传值方式比较(附demo)

    在本篇文章中,我们将详细探讨Struts2的三种主要的传值方式,并通过一个简单的Demo来加深理解。 1. **Action属性传值** Struts2的核心是Action类,每个Action类都代表一个特定的业务逻辑。我们可以通过在Action类...

    struts2使用域模型传值

    struts2使用域模型传值,如何在struts2中使用与模型传值

    struts2-传值方式

    ### Struts2 传值方式详解 在Struts2框架中,实现前后台的数据传递是构建Web应用的基础之一。本文将详细介绍三种常见的Struts2数据传递方式:通过默认的Action属性传递、使用Value Object(VO)传递以及利用...

    struts2传值

    以上就是Struts2中传值的主要方式和一些基本用法。理解这些概念和实践方法对于开发基于Struts2的Web应用至关重要,它能帮助开发者更有效地管理视图层与控制层之间的数据流动,从而提高代码的可读性和可维护性。在...

    struts 2中文汉字传值

    总之,Struts 2 中处理中文汉字传值的关键在于理解和正确使用字符编码,包括设置页面编码、响应编码、URL编码和Action中的解码步骤。确保每个环节都与UTF-8编码兼容,可以避免中文字符的乱码问题。在实际开发中,还...

    struts2配置文件传值中文乱码

    在Struts2框架中,中文乱码问题通常发生在数据传输过程中,尤其是从客户端到服务器端的数据传递,或者是在服务器内部处理时出现编码不一致导致的问题。具体原因可能包括: 1. **客户端与服务器端编码设置不一致**:...

    Struts 1.3 +JQuery+Json Post传值

    Struts 1.3 +JQuery+Json Post传值 由于网上关于这个的资料很少,现整理出来,方便大家学习. 关于Json的优势,网上的评价都很高,对于处理复杂的数据相对于处理xml来说要好很多,更多关于这方面的知识读者可以到网上...

    ajax请求传值Struts2+jsp

    Action类中的方法通常需要一个`execute`方法,返回一个表示结果的字符串,Struts2会根据这个结果选择合适的Result来展示响应。 ```java public class AjaxAction { private String value; public void setValue...

    struts2 Https 配置

    2. **Struts2配置**:在Struts2的应用中,我们需要确保Action请求被重定向到HTTPS。这可以通过在`struts.xml`配置文件中使用`&lt;constant&gt;`标签设置`struts.action.excludePattern`属性来实现。 ```xml ...

    struts2防止表单重复提交--重定向

    Struts2提供了多种方法来防止这种情况,其中一种是通过重定向来实现。下面将详细解释Struts2如何通过重定向来防止表单重复提交。 首先,理解表单重复提交的场景:用户在提交表单后,由于网络延迟或其他原因,可能会...

    留言板留言板struts2留言板struts2

    Struts2内置了多种结果类型,如dispatcher(重定向或转发到一个JSP页面)、stream(下载文件)等,也可以自定义结果类型。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,...

    Struts2接口文档

    总的来说,Struts2接口文档是学习和使用Struts2框架不可或缺的工具,它能帮助开发者高效地理解和使用框架提供的各种组件和接口,提升开发效率,减少错误,并有助于深入理解MVC模式在实际项目中的应用。通过仔细研读...

    Struts2中文教程,Struts2API

    在“Struts2中文教程”中,你可以找到关于这个框架的基础知识,包括安装配置、Action类、结果类型、拦截器等关键概念的详细介绍。教程通常会从最基础的环境搭建开始,教你如何配置Struts2的核心库和web.xml文件,...

    struts2 中文手册

    结果可以是重定向、转发、或者直接渲染一个JSP页面。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认的表达式语言,用于在Action和视图之间传递数据。 6. **表单和验证**:Struts2...

    Struts2-API+Struts2中文帮助文档

    文档中还会讲解如何使用Struts2的异常处理机制,以及如何调试和解决常见的运行时问题。 总的来说,这个压缩包对于想深入理解并熟练掌握Struts2框架的开发者来说是宝贵的资源。通过API文档可以了解框架的底层机制,...

    struts2 API帮助文档

    这个API帮助文档是开发者在使用Struts2框架时的重要参考资料,它详细阐述了框架的各种组件、类库和方法,有助于理解并有效利用Struts2的功能。 1. **Struts2核心组件** - `struts2-core`:这是Struts2框架的核心...

    struts2中result类型之redirectAction

    在Struts2中,Result是Action执行后控制流程的重要组件,它定义了Action执行完毕后如何转发或重定向到一个新的页面。"redirectAction"是Struts2中的一种Result类型,专门用于实现HTTP级别的重定向。 重定向是一种...

Global site tag (gtag.js) - Google Analytics