Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.6.10 全局结果

前面已经提到了,Struts 2的<result .../>元素,也可放在<global-results .../>元素中进行配置,当在<global-results .../>元素中配置<result .../>元素时,该<result .../>元素配置了一个全局结果,全局结果的作用范围是对所有的Action都有效。

将上面一个应用的struts.xml配置文件改为如下形式。

程序清单:codes\03\3.6\globalResult\WEB-INF\src\struts.xml

<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.i18n.encoding" value="GBK"/>
    <!-- Struts 2的Action必须放在指定的包空间下定义 -->
    <package name="crazyit" extends="struts-default">
          <!-- 在global-results元素中配置全局结果 -->
          <global-results>
                <!-- 配置Result,使用表达式来指定该结果的资源 -->
                    <result>/WEB-INF/content/${target}.jsp</result>
          </global-results>
          <!-- 配置处理用户请求的Action -->
          <action name="myAction" class="org.crazyit.struts2.action.MyAction"/>
          <action name="*">
                <result>/WEB-INF/content/{1}.jsp</result>
          </action>
    </package>
</struts>

上面的配置片段配置了一个 Action,但在该 Action 内没有配置任何结果——但这不会影响系统的运转,因为提供了一个名为success的全局结果,而这个全局结果的作用范围是对所有的Action都有效。

如果一个Action里包含了与全局结果里同名的结果,则Action里的局部Action会覆盖全局Action。也就是说,当Action处理用户请求结束后,会首先在本Action的局部结果里搜索逻辑视图对应的结果,只有在 Action 的局部结果里找不到逻辑视图对应的结果时,才会到全局结果里搜索。

提示:

因为全局结果的影响范围是对所有的 Action 都有效,因此如果不是需要对所有的Action都有效的结果,就不应该放在<global-result ... />元素里定义,而是应该放在<action .../>元素里定义。