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

3.6.2 配置结果

Struts 2 的 Action 处理用户请求结束后,返回一个普通字符串——逻辑视图名,必须在struts.xml文件中完成逻辑视图和物理视图之间的映射,才可以让系统转到实际的视图资源。

简单地说,结果是告诉Struts 2框架,当Action处理结束时,系统下一步做什么。Struts 2通过在struts.xml文件中使用<result .../>元素来配置结果。根据<result .../>元素所在位置的不同, Struts 2提供了两种结果。

局部结果:将<result .../>作为<action .../>元素的子元素配置。

全局结果:将<result .../>作为<global-results .../>元素的子元素配置。

关于全局结果,将在后面介绍。此时介绍的都是局部结果,局部结果是通过在<action .../>元素中指定<result .../>元素来配置的,一个<action .../>元素可以有多个<result .../>元素,这表示一个Action可以对应多个结果。

最典型的<result .../>配置片段如下:

<!-- 为success的逻辑视图配置Result,type属性指定结果类型 -->
<result name="success" type="dispatcher">
    <!-- 指定该逻辑视图对应的实际的视图资源 -->
    <param name="location">/thank_you.jsp</param>
    <param name="parse">true</param>
</result>

上面的<result.../>元素使用了最烦琐的形式,既指定了需要映射的逻辑视图名(success),也指定了结果类型(dispatcher),并使用了子元素的形式来指定实际的视图资源。

对于上面使用<param .../>子元素配置结果的形式,其中<param .../>元素的name属性可以为如下两个值。

location:此参数指定了该逻辑视图对应的实际的视图资源。

parse:此参数指定是否允许在实际视图名字中使用 OGNL 表达式,该参数值默认为true。如果设置该参数值为 false,则不允许在实际视图名中使用表达式。通常无须修改该参数值。

因为通常无须指定parse参数值,所以常常采用如下简化形式来配置实际的视图资源。

<!-- 为success的逻辑视图配置Result,type属性指定结果类型 -->
<result name="success" type="dispatcher">/thank_you.jsp </result>

显然,这种直接给出视图资源的形式比前面使用子元素的形式要简洁多了。

除此之外,Struts 2还允许省略指定结果类型,即可改写成如下形式:

<!-- 为success的逻辑视图配置Result,省略type属性-->
<result name="success">/thank_you.jsp </result>

在这个时候,系统将使用默认的结果类型,Struts 2默认的结果类型就是dispatcher(用于与JSP整合的结果类型)。

提示:

Struts 2默认的结果类型是dispatcher,但我们可以通过修改配置文件来改变默认的结果类型。一旦改变了默认的结果类型,如果配置<result .../>元素时省略type元素,则意味着使用默认的结果类型。

不仅如此,Struts 2还可省略逻辑视图名,即可改写成如下形式:

<!-- 配置默认结果,省略type属性-->
<result>/thank_you.jsp </result>

如果省略了<result .../>元素的name属性,系统将采用默认的name属性值,默认的name属性值为success。因此,即使我们不给出逻辑视图名success,系统也一样为success的逻辑视图配置Result。

提示:

如果配置<result .../>元素时没有指定 location 参数,系统将会把<result ...>…</result>中间的字符串当成实际的视图资源;如果没有指定name属性,则name属性采用默认值success;如果没有指定type属性,则采用Struts 2的默认结果类型。