一、result结果集类型(参考Struts2_1500_ResultType)
在默认时,<result>标签的type属性值是“dispatcher”(实际上就是转发,forward),所有的result-type可以在struts2-core-2.x.x.jar包或struts2源代码中的struts-default.xml文件中找到,他们分别为:
1、dispatcher用来转向页面,运用服务器跳转。
2、redirect重定向到一个URL ,客户端跳转,被跳转的页面中丢失传递的信息,如request
3、chain 用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息。
4、redirectAction重定向到一个Action ,跳转的页面中丢失传递的信息,如request
5、freemarker处理FreeMarker模板
6、httpheader控制特殊HTTP行为的结果类型
7、stream向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据
8、velocity处理Velocity模板
9、xslt 处理XML/XLST模板
10、plaintext显示原始文件内容,例如文件源代码 ,一般使用在代码学习网站
11、tiles结合Tile使用
常见问题:使用chain,如果需要forward到其他package下的action,需要加如下参数:
<result type="chain">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
二、GlobalResult(参考Struts2_1600_GlobalResult)
在package中进行如下配置,整个package内都可以使用。
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
如果要在其他的package里extends相应的package同样可以使用全局结果集。
extends在实际的项目开发也是经常使用,例如 对于各个模块的一些可以共用的配置(错误界面、未找到相应Action等)可以统一写到一个package中,各个模块继承共用配置。
三、dynamicresult动态结果集(参考Struts2_1700_DynamicResult)
对于Action中的某一属性x进行动态指定具体的结果location,在struts.xml中可以在result中用 ${x}进行调用。$可以取 Value Stack中的值。这种方法是实际应用不多。
四、带参数的结果集(参考Struts2_1800_ResultWithParams)
对于服务器端跳转(forward)不需要传递参数,因为对于一个request只有一个Value Stack,多个Action可以共用。对于客户端跳转(redirect)需要传递参数,因为存在多个request,Value Stack中的值不能共用。
配置文件中进行如下配置
<result type="redirect">/user_success.jsp?t=${type}</result>
在user_success.jsp中应该使用 <s:property
value="#parameters.t"/>
从Action Context中取值,不能用<s:property
value="t"/>
从Value Stack中取值,因为Value Stack 中为空。
五、Result总结
常用四种类型:
1、 dispatcher(默认)
2、 redirect
3、 chain
4、 redirectAction
全局结果集
5、 global-results | extends
动态结果(了解)
6、 在action中保存一个属性,存储具体的结果location
传递参数
7、 客户端跳转才需要传递
8、 ${}表达式(不是EL)