struts2中常用Result类型的用法
fmms
13年前
一、dispatcher <br /> <br /> (1)为缺省的result类型,一般情况下我们在struts.xml会这么写: <br /> <result name="success">/main.jsp</result> <br /> <br /> 以上写法使用了两个默认,其完整的写法为: <br /> # <result name="success" type="dispatcher"> <br /> # <param name="location">/maini.jsp</param> <br /> # </result> <br /> <br /> 第一个默认:type="dispatcher";第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type="chain"解决)。 <br /> <br /> (2)实现方式 <br /> <br /> 从doExecute方法看出,有三个出口(finalLocation为要跳转的地址): <br /> <br /> pageContext.include(finalLocation); <br /> <br /> dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的) <br /> <br /> dispatcher.include(request, response); <br /> <br /> 而我们知道,forward与include都是转发到context内部的资源。 <br /> <br /> 二、redirect <br /> <br /> (1)可以重定向到一个页面,另一个action或一个网址。 <br /> # <result name="success" type="redirect">aaa.jsp</result> <br /> # <result name="success" type="redirect">bbb.action</result> <br /> # <result name="success" type="redirect">www.baidu.com</result> <br /> <br /> (2)实现方式: <br /> <br /> 查看doExecute方法,只有一个出口: <br /> <br /> response.sendRedirect(finalLocation); <br /> <br /> sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。 <br /> <br /> 三、chain <br /> <br /> (1)主要用于把相关的几个action连接起来,共同完成一个功能。 <br /> # <action name="step1" class="test.Step1Action"> <br /> # <result name="success" type="chain">step2.action</result> <br /> # </action> <br /> # <br /> # <action name="step2" class="test.Step2Action"> <br /> # <result name="success">finish.jsp</result> <br /> # </action> <br /> <br /> (2)实现方式: <br /> <br /> 查看execute()方法,主要思想如下: <br /> <br /> // 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之 <br /> # proxy = actionProxyFactory.createActionProxy(finalNamespace, <br /> # finalActionName, finalMethodName, extraContext); <br /> # proxy.execute(); <br /> <br /> (3)多个action间数据的传递 <br /> <br /> 主要有两种方式: <br /> <br /> 1。由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的方法如下: <br /> # HttpServletRequest request = ServletActionContext.getRequest(); <br /> # String s=(String)request.getAttribute("propName"); <br /> <br /> 2。实现ModelDriven接口 <br /> <br /> 在Step1Action中,加入getModel: <br /> # public Object getModel() { <br /> # return message; <br /> # } <br /> <br /> 在Step2Action中,加入setModel: <br /> # public void setModel(Object o){ <br /> # System.out.println("message is:"+o); <br /> # } <br /> <br /> 注意,setModel的调用先于execute()方法后于构造方法。 <br /> <br />