struts2的常用Result类型用法

chain

用来处理Action链

com.opensymphony.xwork2.ActionChainResult

dispatcher

用来转向页面,通常处理JSP

org.apache.struts2.dispatcher.ServletDispatcherResult

freemaker

处理FreeMarker模板

org.apache.struts2.views.freemarker.FreemarkerResult

httpheader

控制特殊HTTP行为的结果类型

org.apache.struts2.dispatcher.HttpHeaderResult

redirect

重定向到一个URL

org.apache.struts2.dispatcher.ServletRedirectResult

redirectAction

重定向到一个Action

org.apache.struts2.dispatcher.ServletActionRedirectResult

stream

向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据

org.apache.struts2.dispatcher.StreamResult

velocity

处理Velocity模板

org.apache.struts2.dispatcher.VelocityResult

xslt

处理XML/XLST模板

org.apache.struts2.views.xslt.XSLTResult

plainText

显示原始文件内容,例如文件源代码

org.apache.struts2.dispatcher.PlainTextResult

redirect-action

重定向到一个Action

org.apache.struts2.dispatcher.ServletActionRedirectResult

plaintext

显示原始文件内容,例如文件源代码

org.apache.struts2.dispatcher.PlainTextResult

一、dispatcher

(1)为缺省的result类型,一般情况下我们在struts.xml会这么写:

<result name="success">/main.jsp</result>

以上写法使用了两个默认,其完整的写法为:

  • <result name="success" type="dispatcher">
  • <param name="location">/maini.jsp</param>
  • </result>
  • 第一个默认:type="dispatcher";第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type="chain"解决)。

    (2)实现方式

    从doExecute方法看出,有三个出口(finalLocation为要跳转的地址):

    pageContext.include(finalLocation);

    dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的)

    dispatcher.include(request, response);

    而我们知道,forward与include都是转发到context内部的资源。

    二、redirect

    (1)可以重定向到一个页面,另一个action或一个网址。

  • <result name="success" type="redirect">aaa.jsp</result>
  • <result name="success" type="redirect">bbb.action</result>
  • <result name="success" type="redirect">www.baidu.com</result>
  • (2)实现方式:

    查看doExecute方法,只有一个出口:

    response.sendRedirect(finalLocation);

    sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。

    三、chain

    (1)主要用于把相关的几个action连接起来,共同完成一个功能。

  • <action name="step1" class="test.Step1Action">
  • <result name="success" type="chain">step2.action</result>
  • </action>
  • <action name="step2" class="test.Step2Action">
  • <result name="success">finish.jsp</result>
  • </action>
  • (2)实现方式:

    查看execute()方法,主要思想如下:

    // 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之

  • proxy = actionProxyFactory.createActionProxy(finalNamespace,
  • finalActionName, finalMethodName, extraContext);
  • proxy.execute();
  • (3)多个action间数据的传递

    主要有两种方式:

    1。由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的方法如下:

  • HttpServletRequest request = ServletActionContext.getRequest();
  • String s=(String)request.getAttribute("propName");
  • 2。实现ModelDriven接口

    在Step1Action中,加入getModel:

  • public Object getModel() {
  • return message;
  • }
  • 在Step2Action中,加入setModel:

  • public void setModel(Object o){
  • System.out.println("message is:"+o);
  • }
  • 注意,setModel的调用先于execute()方法后于构造方法。

    猜你喜欢

    转载自jiushi555.iteye.com/blog/1629727