Struts2支持多种视图显示,像JSP,freemarker,Velocity,甚至是图表等丰富的视图,这些全靠Result接口来实现的。
Result是架起Action到View的桥梁(引1)。
具体的视图,有一个对应的Result实现类,来执行视图。如ServletDispatcherResult,一般是用来转发到JSP页面的,其中包含处理Request转发到JSP的操作。
if (!insideActionTag && !response.isCommitted() && (request.getAttribute("javax.servlet.include.servlet_path") == null)) { request.setAttribute("struts.view_uri", finalLocation); request.setAttribute("struts.request_uri", request.getRequestURI()); dispatcher.forward(request, response); } else { dispatcher.include(request, response); }
Result的职责主要有:
1.封装跳转逻辑
2.准备显示数据
3.控制输出行为
每种reult-type 对应一个Result的一个实现类
<result-types> <result-type name="dispatcher" class="com.opensymphony.webwork.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="redirect" class="com.opensymphony.webwork.dispatcher.ServletRedirectResult"/> <result-type name="velocity" class="com.opensymphony.webwork.dispatcher.VelocityResult"/> <result-type name="chain" class="com.opensymphony.xwork.ActionChainResult"/> <result-type name="xslt" class="com.opensymphony.webwork.views.xslt.XSLTResult"/> <result-type name="jasper" class="com.opensymphony.webwork.views.jasperreports.JasperReportsResult"/> <result-type name="freemarker" class="com.opensymphony.webwork.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="com.opensymphony.webwork.dispatcher.HttpHeaderResult"/> <result-type name="stream" class="com.opensymphony.webwork.dispatcher.StreamResult"/> <result-type name="plaintext" class="com.opensymphony.webwork.dispatcher.PlainTextResult" /> </result-types>