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的默认结果类型。