Action中result的各种转发类型
<action name="helloworld" class="cn.itcast.action.HelloWorldAction">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值,是内部请求转发)、 redirect 浏览器重定向一个路径,不能访问到WEB-INF下的jsp,redirectAction、plainText。例:type=“redirect ”
在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下:
<result type="redirect">/view.jsp?id=${id}</result>
如果id传递的是中文要进行UTF-8编码,·要用到URLEncode类进行编码。如果以GET方式传递中文的话tomcat会把中文解析成ISO8859-1的格式,也就是乱码,我们要现获得ISO8859-1编码数据后在进行UTF-8格式·用URLDecoder解析。
下面是redirectAction结果类型的例子,如果重定向的action中同一个包下:
这个是重定向到某个action
<result type="redirectAction">helloworld</result>
如果重定向的action在别的命名空间下:
<result type="redirectAction">
<param name="actionName">helloworld</param>
<param name="namespace">/test</param>
</result>
redirectAction其实是一个类,这个类有两个属性ActionName,Namespace
plaintext:显示原始文件内容,例如:当我们需要原样显示jsp文件源代码的时候,我们可以使用此类型。
<result name="source" type="plainText ">
<param name="location">/xxx.jsp</param>
<param name="charSet">UTF-8</param><!-- 指定读取文件的编码 -->
</result>
多个Action共享一个视图--全局result配置
当多个action中都使用到了相同视图,这时我们应该把result定义为全局视图。struts1中提供了全局forward,struts2中也提供了相似功能:
<package ....>
<global-results>
<result name="message">/message.jsp</result>
</global-results>
</package>
补充:
可以为一个类配置配置多个action,但还action的name不能相同。
如果要求全局视图被多个包使用,需要配置包之间的继承,最要是建立一个base包,namespace不配置为默认的命名空间,全局视图定义其中,其他的包继承base包即可访问到全局视图。