在action的指定方法执行完毕后总会返回一个字符串,struts2根据返回的字符串去action的配置中的result去找匹配的名字,根据配置执行下一步的操作。
在ActionSupport基类中定义了五个标准的返回值
String SUCCESS = "success";
String NONE = "none";
String ERROR = "error";
String INPUT = "input";String LOGIN = "login";
当然我们可以自己随意定义返回的名字
result元素有两个用处,首先它提供一个逻辑上名字。一个action可以单纯的返回success或input而不用理会之后的具体细节。第二,result元素提供type属性,可以不仅仅的返回一个jsp页面,而可以实现更多有意思的功能。
每个包可以有自己的默认result type,当一个result没指定type时将使用默认。正常情况下默认的result type为dispatcher。如果一个包继承另一个包,这个包可以实现自己的默认result也可以继承父包的默认result。手动指定一个默认的result如下
<result-types>
<result-type name="dispatcher" default="true"
class="org.apache.struts2.dispatcher.ServletDispatcherResult" />
</result-types>
同时,一个result的name属性也有默认值success。最平常的情况下,一个result如下
<result>
/ThankYou.jsp
</result>
一个action可以有多个不同的result
<action name="Hello">
<result>/hello/Result.jsp</result>
<result name="error">/hello/Error.jsp</result>
<result name="input">/hello/Input.jsp</result>
</action>
全局result
有些时候,一些result是可以为所有的action服务的,例如出错页面的result,登陆页面的result
我们可以定义一些全局result供同一个包的所有actoin共享。注意首先struts2会先搜索局部result,如果没找到则会去全局result寻找匹配的result
<global-results>
<result name="error">/Error.jsp</result>
<result name="invalid.token">/Error.jsp</result>
<result name="login" type="redirectAction">Logon!input</result>
</global-results>
result 的动态参数配置
有些时候我们需要从一个action转向另一个action,但是参数却是运行才能知道,可以用一下的方法实现。下面用一个例子来说明
<struts>
....
<package name="somePackage" namespace="/myNamespace" extends="struts-default">
<action name="myAction" class="com.project.MyAction">
<result name="success" type="redirectAction">otherAction?id=${id}</result>
<result name="back" type="redirect">${redirectURL}</result>
</action>
<action name="otherAction" class="com.project.MyOtherAction">
...
</action>
</package>
....
</struts>
在action中必须有id,redirectURL属性以及它们的get方法
public class MyAction extends ActionSupport {
private int id;
private String redirectURL;
...
public String execute() {
...
if (someCondition) {
this.redirectURL = "/the/target/page.action";
return "back";
}
this.id = 123;
return SUCCESS;
}
public int getId() { return this.id; }
public void setId(int id) { this.id = id; }
public String getRedirectURL() { return this.redirectURL; }
public void setRedirectURL(String redirectURL){this.redirectURL=redirectURL;}
...
}
如果返回success的话将会转到/<app-prefix>/myNamespace/otherAction.action?id=123
当一个result有多个参数时可以通过param子属性指定,在后面会有例子
result 的types
result有许多不同的types,用来实现不同的功能,struts2默认的types有如下几个
Dispatcher 转到一个视图页面,通常为jsp页面。这个是默认的type值。
<result>
/ThankYou.jsp
</result>
Stream 将原始数据字节发送给浏览器,通常用于下载文件
contentType 发送给浏览器的流的mime-type (默认text/plain).
contentLength- 流的长度 (便于浏览器显示下载进度).
contentDispostion- 设置响应头contentDispostion的值(默认inline)
这个我不太清楚是什么意思,Google了一下也没什么好的解释
InputName action提供的输入流的属性名称(默认inputStream).
bufferSize从输入流写入到输出流的缓存大小(默认1024字节).
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">imageStream</param>
<param name="bufferSize">1024</param>
</result>
PlainText 一般用来显示一个jsp或html页面的原始内容
<action name="displayJspRawContent" >
<result type="plaintext">/myJspFile.jsp</result>
</action>
redirectAction 定向到另一个action 觉得没什么太大的用处,举个例子留作参考吧
<package name="public" extends="struts-default">
<action name="login" class="...">
<!-- Redirect to another namespace -->
<result type="redirect-action">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
<-- Redirect to an action in the same namespace -->
<action name="dashboard" class="...">
<result>dashboard.jsp</result>
<result name="error" type="redirect-action">error</result>
</action>
<action name="error" class="...">
<result>error.jsp</result>
</action>
</package>
<package name="passingRequestParameters" extends="struts-default" namespace="/passingRequestParameters">
<-- Pass parameters (reportType, width and height) -->
<!--
The redirect-action url generated will be :
/genReport/generateReport.action?reportType=piewidth=100height=100
-->
<action name="gatherReportInfo" class="...">
<result name="showReportResult" type="redirect-action">
<param name="actionName">generateReport</param>
<param name="namespace">/genReport</param>
<param name="reportType">pie</param>
<param name="width">100</param>
<param name="height">100</param>
</result>
</action>
</package>
感觉type里就这几个用处多一些,其他的几个就不写了。以后有用的时候另外再写
补充:name属性是对请求的去向做一个 配置,而type是对返回的结果进行的配置。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhiweiv/archive/2008/09/17/2943169.aspx
相关推荐
从jsp页面提交form表单后,在struts.xml中寻找匹配的action。在action中处理完业务后返回,在struts.xml中的result属性中转向到另外一个action。
Struts2属性文件详解 struts.configuration 该属性指定加载Struts 2配置文件的配置文件管理器.该属性的默认值是org.apache.Struts2.config.DefaultConfiguration, 这是Struts 2默认的配置文件管理器.如果需要实现...
当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由Spring创建,否则由Struts 2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:...
org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...
默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。如: Xml代码 <constant name="struts.convention.result.path" value="/WEB-INF/page" ...
第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...
02 Struts2-Result 19 一、 Result类型 (type) 19 二、 全局结果集(Globle Result) 20 三、 动态的结果集(dynamic result) 21 四、 带参数的结果集 21 五、 Result总结 22 六、 项目经理: 22 03 OGNL表达式语言 23 ...
该属性的默认值为struts-default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts 2框架默认加载struts.xml文件了。 struts.objectFactory 该属性指定Struts 2中的action由哪个容器...
这些都过result里的type(类型)属性(Attribute)定义的。另外,您还可以自定义result类型。 下面让我们来做一个Velocity模板输出的例子,首先在classes/struts.xml中新建一个Action映射(Mapping),将其result...
4、sqlmapconfig.xml中传入参数和result的设置,只需要将得到的值result映射到有此属性的类对象. 5、JSP/Servlet中获得当前应用的相对路径和绝对路径 JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对...
介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示问题 Action名称的搜索顺序 Action配置的各项默认值 result配置的各种视图转发类型 为Action属性注入值 指定...
02 Struts2-Result 19 一、 Result类型 (type) 19 二、 全局结果集(Globle Result) 20 三、 动态的结果集(dynamic result) 21 四、 带参数的结果集 21 五、 Result总结 22 六、 项目经理: 22 03 OGNL表达式语言 23 ...
本书是广受赞誉的Struts 2优秀教程,它全面而深入地阐述了Struts 2的各个特性,并指导开发人员如何根据遇到的问题对症下药,选择使用最合适的特性。作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,...
Struts2 配置文件result的name属性和type属性
<package name="com.kay.struts2" extends="struts-default" namespace="/test"> <!-- 定义拦截器 name:拦截器名称 class:拦截器类路径 --> ...
· 使用注释: 使用Struts 2开发的应用可以使用Java 5注释,作为XML和Java属性配置之外的一个替代办法。注释尽量减少了对XML的需要。Action、拦截器、验证及类型转换方面都有注释。 插入: 只要把插件JAR文件放到\WEB-...
这个问题搞了一个晚上。(希望对初学的朋友有帮助) 发现不能运行的原因 1、login.jsp的form表格里的...4、struts.xml中的<result name="Sucess">/loginsucess.jsp</result> name要与LoginAction.java的返回结果相对应.