5.3 全局Result
5.3.1 全局Result概述
以前的<result>元素都是作为<action>的子元素出现的,这被称为局部Result,只可以由本<action>元素访问。
要是有一些Result需要由多个Action共用,比如,系统的每个页面都会判断用户是否登陆,如果没有登陆,那么都要跳转到登录页面。这种情况该怎么办呢?
这个时候,就可以配置全局Result,让这多个Action共享这些全局的Result,而不是每个Action都去配置一个跳转回到登录页面的result。
5.3.2 配置和使用
全局Result本身没有任何的特异之处,同样是配置name属性和type属性,包括如何指定jsp的位置都和普通的Result一样,只不过其<result>元素并不是<action>元素的子元素,而是作为<global-results>元素的子元素,而<global-results>元素又是<package>元素的子元素,示例如下:
java代码:
- <package name="helloworld" extends="struts-default">
- <global-results>
- <result name="toLogin">/login.jsp</result>
- </global-results>
-
- <action ……>
- ……
- </action>
- </package>
上面的result省略了type的配置,同样是使用“dispatcher”的ResultType,除了位置不同之外,全局Result和普通的Result完全一样。
5.3.3 搜寻Result的顺序
在有了全局Result之后,需要讨论一下在Action运行之后,根据execute方法的返回值寻找Result顺序了。
(1)首先,先找自己的<action>元素内的<result>元素是否有匹配的,如果有就执行这个Result,如果没有,下一步。
(2)其次,再找自己的<action>所在的包的全局Result,看看是否有匹配的,如果有就执行这个Result,如果没有,下一步。
(3)再次,递归的寻找自己的包的父包、祖父包中的全局Result是否有匹配的,如果有就执行这个Result,如果没有,下一步。
(4)最后,如果上述三种情况都没有匹配的Result的话,则抛出Exception。
注意:如果出现同名的Result,上述的顺序也是Result之间的优先顺序。也就是说,如果Action的execute方法返回的字符串,在局部Result和全局Result中都有能匹配的配置,那么以局部Result为准。
5.3.4 应用示例
回忆一下前面讲述的Action的分模块配置,把一个旅游项目,分成了饭店管理模块和入境管理模块,并为他们分别定义了配置文件:struts-hotel.xml和struts-inbound.xml。
这两个模块中的任何操作,都必须登陆后才能操作,因此,任何一个操作都有直接跳转回登陆页面的可能。
前面已经把配置文件分成了三个,其中,总配置文件struts.xml引用了分模块的配置文件struts-hotel.xml和struts-inbound.xml。因为hotel模块和inbound模块都需要使用跳转到登录页面这个Result,如果每个模块里面都去配置这个Result,会很累赘,因此,可以设置一个父包,把这个全局Result放在父包里。
父包设置在struts.xml里面,示例如下:
java代码:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <constant name="struts.locale" value="zh_CN"></constant>
- <constant name="struts.i18n.encoding" value="gb2312"></constant>
-
- <package name="struts-abstract" extends="struts-default">
- <global-results>
- <result name="login" type=”redirect”>/login.jsp</result>
- </global-results>
- </package>
-
- <include file="struts-hotel.xml"></include>
- <include file="struts-inbound.xml"></include>
- </struts>
接下来看看struts-hotel.xml,有一点变化,这个包由继承struts-default变为继承struts-abstract,以便能访问struts-abstract包下名为login的全局Result。代码示例如下:
java代码:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="hotel" namespace="/hotel" extends="struts-abstract">
- <action name="bookingAction" class="cn.javass.hotel.action.HotelBookingAction">
- <result name="success">/hotel/booking.jsp</result>
- </action>
- <action name="queryAction" class="cn.javass.hotel.action.QueryAction">
- <result name="success">/hotel/query.jsp</result>
- </action>
- </package>
- </struts>
接下来看看struts-inbound.xml,有一点变化,这个包由继承struts-default变为继承struts-abstract,以便能访问struts-abstract包下名为login的全局Result。代码示例如下:
java代码:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="inbound" namespace="/inbound" extends="struts-abstract">
- <action name="bookingAction" class="cn.javass.inbound.action.BookingAction">
- <result name="success">/inbound/booking.jsp</result>
- </action>
- <action name="queryAction" class="cn.javass.inbound.action.QueryAction">
- <result name="success">/inbound/query.jsp</result>
- </action>
- </package>
- </struts>
这么配置过后,就可以在HotelBookingAction和BookingAction里面的execute方法里面,返回名称为“login”的Result了。虽然看起来它们自己并没有配置名称为“login”的Result,但是它们继承的父包里面有,也就是有全局的Result。
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4052.html】
欢迎访问http://sishuok.com获取更多内容
分享到:
相关推荐
这个压缩包中的“研磨Struts2配书视频对应的演示源代码”是《研磨Struts2》一书作者为了帮助读者更好地理解和实践书中理论知识而提供的实际示例代码。 首先,让我们深入理解Struts2的核心概念和技术特性: 1. **...
### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。
由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。
Result是Struts2中负责返回结果的对象,第五章详细介绍了Result的各种类型和用法。预定义的Result类型如dispatcher、redirect、chain等,以及如何自定义Result,都是本章的重点。此外,Struts2的异常映射、...
《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...
根据提供的文件信息,我们可以推断出这是一份关于《研磨Struts 2》书籍PDF版本的下载资源。为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这...
研磨Struts2 高清完整版,请和第一部分一起下载啊
5. **Struts2架构**:Struts2的系统架构包含ActionServlet、FilterDispatcher、ActionInvocation等核心组件。ActionServlet是入口点,FilterDispatcher处理过滤请求,ActionInvocation负责执行Action。 6. **运行...
研磨Struts2_12859679_高清完整版
研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...
Java工程师三大框架面试题.pdf
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11...
第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) ...