Action配置完了就该配置返回结果了,这样才能让它们关联起来哦
7.配置结果类型
Struts2使用<result/>元素在struts.xml文件中进行结果配置,根据<result/>元素的位置不同,可以分为:
l 局部结果:将<result/>配置在<action/>中;
l 全部结果:将<result/>配置在<global-results/>中;
<result/>元素的有两个属性,分别是name属性和type属性,此外在<result/>元素中还可以配置<param/>元素,<param/>元素的name属性可以为location和parse这两个值,其中location指定了逻辑视图所对应的实际视图资源;而parse则指定是否允许在实际视图资源中使用OGNL表达式,parse默认值为true。
如果在配置<result/>时没有指定location属性值,则<result/>自动将<result></result>之间的字符串值作为实际视图资源;如果没有指定name属性,则采用默认值success,如果没有指定type类型,则默认为dispatcher结果类型。
如果一个Action里包含也全部结果同名的结果,则Action里的局部结果将会覆盖全局Action。
8.Struts2支持的结果类型
Struts2支持多种结果类型,除了最常用的jsp页面外,也支持像Velocity、FreeMarker、Jasper等;Struts2的结果类型要求实现com.opensymphony.xwork.Result,Struts2在struts-default.xml中配置了一系列默认的结果类型,其中dispatcher为默认的结果类型:
l chain:Action链式处理的结果类型;
l chart:整合JFreeChart的结果类型;
l dispatcher:用于JSP整合的结果类型;
l freemarker:FreeMarker整合的结果类型;
l httpheader:控制特殊的HTTP行为的结果类型;
l jasper:JasperReports整合的结果类型;
l jsf:JSF整合的结果类型;
l redirect:直接跳转到其它URL的结果类型;
l redirect-action:直接跳转到其它Action的结果类型;
l stream:向浏览器返回一个InputStream;
l tiles:与Tiles整合的结果类型;
l velocity:与Velocity整合的结果类型;
l xslt:与XML/XSLT整合的结果类型;
l plaintext:显示某个页面的原始代码的结果类型;
dispatcher结果类型与redirect结果类型的差别是转发和重定向的差别:重定向会丢失所有的请求参数、请求属性、Action的处理结果等,即是说redirect的效果就是重新产生一个新请求,其实系统内部是调用HttpServletResponse的sendRedirect(String)方法来重定向资源的。
当一个Action处理结束后直接将请求重定向到另一个Action时需要使用redirect-action结果类型,并提供actionName及namespace的值,其中actionName为重定向的Action名,namespace为重定向的Action所在的命名空间。
9.动态结果
在前面的动态方法调用中已经提及到使用表达式来动态指定<result/>元素的实际视图资源,除了此种方法外,还可以使用${属性名}的方式来指定视图资源,这里的属性名就是对应Action实例里的属性,除了这种单属性名表达式的形式外,还可以使用完全的OGNL表达式,如${属性名.属性名.属性名……},示例如下:
<action name=”demo” class=”com.demo.DemoAction” namespace=”/demo”>
<result name=”error”>/error.jsp</result>
<result name=”success” type=”redirect”>
EditAction.do?recoredId=${currentUser.userId}
</result>
</action>
上述配置中使用${currentUser.userId}表达式来指定success后的视图资源,对于这样的表达式,要求在对应的DemoAction中包含currentUser属性,且currentUser属性必须包含userId属性,否则${currentUser.userId}的值将为null。