struts2.0中的result是视图资源的配置,struts2.0的机制可以很好的兼容各种视图资源,驶入资源可以使用各种实现技术。jsp、FreeMarker等,通过配置可以让Action转向各种技术实现的视图资源。
<package name="it" extends="struts-default" namespace="">
<action name="123" class="###" method="###">
<result name="success" type="dispatch">sjf.jsp</result>
</action>
</package>
result的tyoe字段可以标注各种视图的类型。
在struts-default.xml文件保存在struts-core-***中,部分片段
从中我们可以看到type属性支持的视图资源格式很丰富。
chain:Action链式处理的结果类型
dispatcher:使用jsp作为视图结果
frermarker:freemarker
httpheader:控制特殊的http行为
redirect:浏览器重定向
redirectAction:跳转到Action
stream:向浏览器返回一个InputStream(通常用于文件下载)
velocity:velocity
xslt:xml/xslt结果
plain text:显示整个页面的原始代码。
当我们在进行页面的重定向redirect是,浏览器是无法访问我们的WEB-INF目录下的jsp页面的,它只能访问webContent下的视图资源,浏览器的重定向是发生在浏览器上的,而不是发生在服务器上,所以它不能像forward一样直接转发。
当使用redirectAction时
<package name="it" extends="struts-default" namespace="">
<action name="123" class="###" method="###">
<result name="success" type="redirectAction">1234?username=${username}</result>
</action>
<action name="1234" class="###" method="###">
<result name="success" type="dispatch">sjf.jsp</result>
</action>
</package>
这样我们在同一个包中,直接使用action的name就行,但是当我们要转向的是另一个包中action,就不能这样写了,result有两个属性对应着两个方法setActionName和setNamespace,属性为actionName,namespace<package name="it" extends="struts-default" namespace="">
<action name="123" class="###" method="###">
<result name="success" type="redirectAction">
<param name="actionName">123</param>
<param name="namespace">/test<param>
</result>
</action>
</package>
<package name="it" extends="struts-default" namespace="/test">
<action name="123" class="###" method="###">
<result name="success" >1234.sp</result>
</action>
</package>
这样就可以重定向到其他的package中。
plain text 是要显示页面的源代码
<result type="plainText">
<param name="location">/welcome.jsp</param>
<param name="charSet">UTF-8</param>
</result>
关于视图,当多个action要共享同一个视图的时候,我们没必须在每个action中都定义该视图
可以在包中定义
<global-results>
<result name="message">message.jsp</result>
</global-results>
或者说多个包要同时共享result,定义一个package然后其他包继承这个包就ok了。
<package name="iii" namespace="" extends="struts-default">
<global-results>
<result name="message">message.jsp</result>
</global-results>
</package>
<package name="itcast" namespace="/test" extends="iii">
<package name="ddd" namespace="/er" extends="iii">
这样就ok了