这篇内容是续 struts2入门(二)-知识总结 的
二、关于struts.xml中result的各种视图转发类型及全局视图配置
前面说过struts2中result的视图转发类型有:dispatcher(默认),redirect,redirectAction,plainText
struts.xml <?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.configuration.xml.reload" value="true"/> <package name="base" extends="struts-default"> <global-results><!-- 全局视图配置 --> <result name="success">/page/global.jsp</result> <result name="local">/page/local2.jsp</result> </global-results> </package> <!-- 继承base包,可以使用base包中的global视图 --> <package name="test1" namespace="/a/b" extends="base"> <global-results><!-- 本包中的global-results只供本包和其子包action使用--> <result name="local">/page/local.jsp</result> </global-results> <action name="hello" class="sample1.HelloWorldAction" method="execu"> <result name="ok">/showHello.jsp</result> </action> <action name="dispatcher"> <!-- 该action不指定class,则默认找com.opensymphony.xwork2.ActionSupport, 不指定method,则默认执行execute ,然后返回"success" --> <result name="success">/showHello.jsp</result> <!-- 1).dispatcher 这里result没指定name,则默认为name="success",没指定type属性,则默认type="dispatcher" --> </action> <action name="redirect"> <result type="redirect">/page/redirect.jsp</result> <!-- 2). redirect 这里result的type属性指定为"redirect",则所指定的是要重定向到某个路径 但是要注意,指定的路径不能是WEB-INF目录下的 --> </action> <action name="redirectAction"> <result type="redirectAction">dispatcher</result> <!-- 3). redirectAction 这里result的type属性指定为"redirectAction",则表示要重定向到某个action, 重定向到本包的action,只需直接指定actionName即可 注意:如果要重定向的action不在同一个包中,例如要重定向到"test2"包中的hello2 则需要改为 <result type="redirectAction"> <param name="namespace">/</param>该参数项表示 <param name="actionName">hello2</param> </result> "redirectAction"实际是一个Java类型,可以在struts-default.xml中找到对应的类路径, org.apache.struts2.dispatcher.ServletActionRedirectResult 使用param参数项表示要给redirectAction设置参数,可以从set方法中看出,它有2个参数要设置, namespace 表示另一个包的命名空间 如test2中的/ actionName 就不用多说了,就是在指定名称空间下的一个action的name --> </action> <action name="plain"> <result type="plainText">/index.jsp</result> </action> <!-- 4). plainText 用plainText显示原始文件内容,比如:可以将js,jsp文件源码显示到浏览器 注意:当文件中有中文时,可能会出现乱码,这时需要配置一下参数,指定编码方式 而我们开发时一般是用UTF-8编码的, 具体看 myeclipse的windows->pereferences->General->workspace <result type="plainText"> <param name="location">/index.jsp</param> <param name="charSet">UTF-8</param> </result> --> <action name="test"> <!-- 该action不指定class,则默认找com.opensymphony.xwork2.ActionSupport, 不指定method,则默认执行execute ,然后返回"success",由于没有配置result,则会到 先在本包查找global视图,若没有name="success"的视图,则到父包的global去找, 一直找到最上层父包,还是没有就只能报错了--> </action> </package> <package name="test2" namespace="/" extends="test1"> <action name="hello2" class="sample1.HelloWorldAction" method="fn"> <!-- 这里的fn返回"local",这里没有配置result,则会到父包test1中找local, 若父包test1中也没有,则到test1的父包base中找 --> </action> </package> </struts>