目录
Struts2中结果页面的配置
在struts.xml核心配置文件中,我们可以配置Action类的URL访问路径,以及对应执行的方法(默认为execute),此外,如果方法有返回值还可以配置返回值对应跳转的页面或Action。如:
<package name="demo1" extends="struts-default" namespace="/">
<action name="book" class="com.wm103.action.BookAction">
<result name="success">/index.jsp</result>
</action>
<action name="order" class="com.wm103.action.OrderAction">
<result name="success">/index.jsp</result>
</action>
</package>
全局结果页面
如果存在多个Action,返回值相同,且处理结果的操作一致,如:上述中请求 /book 和 /order 后,服务器分别执行BookAction、OrderAction的execute方法,方法返回值为 success 时处理结果的操作一致,均为:
<result name="success">/index.jsp</result>
则此时可以采用全局结果页面配置,减少相同的配置。如可以这么配置:
<package name="demo1" extends="struts-default" namespace="/">
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<action name="book" class="com.wm103.action.BookAction"></action>
<action name="order" class="com.wm103.action.OrderAction"></action>
</package>
注:global-results
标签是在package
标签内进行配置,不同package下如果有需要,则需要在对应的package下重新配置。
局部结果页面
相对于全局结果页面的配置,如果 package 标签下存在某一Action的配置返回值的处理在 全局结果页面配置 中存在,但 结果操作不一致的话,则需要采用局部结果页面的配置,即在该action标签下配置 result标签,覆盖全局结果页面配置对该返回值的处理。如:
<package name="demo1" extends="struts-default" namespace="/">
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<action name="book" class="com.wm103.action.BookAction">
<result name="success">/book.jsp</result>
</action>
<action name="order" class="com.wm103.action.OrderAction"></action>
</package>
此时,访问 /book 后 BookAction 执行 execute方法返回值 success 是转发到 book.jsp,而不是 index.jsp了。
result标签的type属性
result标签除name属性外,还有一个type属性,该属性用于指定“到路径里面的方式”,转发OR重定向。
(1)针对页面的type属性值
type属性的默认值为dispatcher,即转发到某个页面。如:
<result name="success">/book.jsp</result>
<result name="success" type="dispatcher">/book.jsp</result>
type属性值为redirect时,表示将重定向到某个页面。如:
<result name="success" type="redirect">/book.jsp</result>
(2)针对Action的type属性值
type属性值为chain时,表示请求将转发到某个Action。(一般不使用)如:
<result name="success" type="chain">order</result>
这里表示BookAction的execute返回值是success时,将请求转发到另一个Action访问路径。这里result标签体的值是同个namespace下(不同package也可以,只要package的namespace相同即可)的某一action标签name属性值。如这里配置的order是根据该action标签中name属性的值填写的:
<action name="order" class="com.wm103.action.OrderAction"></action>
type属性值为redirectAction时,表示请求将重定向到某个Action。如:
<result name="success" type="redirectAction">order</result>
这里result标签体中的值填写方式同上。