文档章节

Result Types

完美世界
 完美世界
发布于 2014/06/05 15:53
字数 835
阅读 50
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

第八章 Result Types

一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容)。

Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等。

Struts2支持的不同类型的返回结果为:

名字 说明
Chain Result 用来处理Action链
Dispatcher Result 用来转向页面,通常处理JSP
FreeMarker Result 处理FreeMarker模板
HttpHeader Result 用来控制特殊的Http行为
Redirect Result 重定向到一个URL
Redirect Action Result 重定向到一个Action
Stream Result 向浏览器发送InputSream对象,通常用来处理文件下载
Velocity Result 处理Velocity模板
XLS Result 处理XML/XLST模板
PlainText Result 显示原始文件内容,例如文件源代码
S2PLUGINS:Tiles Result  结合Tile使用

另外第三方的Result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。

在struts-default.xml文件中已经有了对于所有类型Result的定义:

<result-types>
    <result-type name=”chain”
             class=”com.opensymphony.xwork2.ActionChainResult”/>
    <result-type name=”dispatcher”
             class=”org.apache.struts2.dispatcher.ServletDispatcherResult”
             default=”true”/>
    <result-type name=”freemarker”
             class=”org.apache.struts2.views.freemarker.FreemarkerResult”/>
    <result-type name=”httpheader”
             class=”org.apache.struts2.dispatcher.HttpHeaderResult”/>
    <result-type name=”redirect”
             class=”org.apache.struts2.dispatcher.ServletRedirectResult”/>
    <result-type name=”redirectAction”
             class=”org.apache.struts2.dispatcher.ServletActionRedirectResult”/>
    <result-type name=”stream”
             class=”org.apache.struts2.dispatcher.StreamResult”/>
    <result-type name=”velocity”
             class=”org.apache.struts2.dispatcher.VelocityResult”/>
    <result-type name=”xslt”
             class=”org.apache.struts2.views.xslt.XSLTResult”/>
    <result-type name=”plainText”
             class=”org.apache.struts2.dispatcher.PlainTextResult” />
    <!– Deprecated name form scheduled for removal in Struts 2.1.0.
         The camelCase versions are preferred. See ww-1707 –>
    <result-type name=”redirect-action”
             class=”org.apache.struts2.dispatcher.ServletActionRedirectResult”/>
    <result-type name=”plaintext”
             class=”org.apache.struts2.dispatcher.PlainTextResult” />
</result-types>

从上述代码中可以看出在不指定Result类型的时候使用dispatcher类型。

定义一个Result值,

<result name=”success” type=”dispatcher”>
    <param name=”location”>/ThankYou.jsp</param>
</result>

由于type默认值是dispatcher,所以这里不需要定义,另外name的默认值为success所以这里也不需要定义。

上述代码可以简写为:

<result>
    <param name=”location”>/ThankYou.jsp</param>
</result>

另外location参数也可以直接卸载result标签内部,所以上述代码的最简单的写法为:

<result>/ThankYou.jsp</result>

我们也可以定义多个不同的Result

<action name=”Hello”>
 <result>/hello/Result.jsp</result>
 <result name=”error”>/hello/Error.jsp</result>
 <result name=”input”>/hello/Input.jsp</result>
</action>

上述代码的含义为,名字为Hello的Action有三个返回结果,并且都是dispatcher类型(默认类型),这三个返回值的名字分别为success(默认值),error,input,对应的页面的路径分别为/hello/Result.jsp,/hello/Error.jsp,/hello/Input.jsp。

有些时候我们需要一个定义在全局的Result,这个时候我们可以在package内部定义全局的Result,例如:

<global-results>
 <result name=”error”>/Error.jsp</result>
 <result name=”invalid.token”>/Error.jsp</result>
 <result name=”login” type=”redirect-action”>Logon!input</result>
</global-results>

动态返回结果

有些时候,只有当Action执行完璧的时候我们才知道要返回哪个结果,这个时候我们可以在Action内部定义一个属性,这个属性用来存储Action执行完璧之后的Result值,例如:

private String nextAction;
public String getNextAction() {
    return nextAction;
}

在strutx.xml配置文件中,我们可以使用${nextAction}来引用到Action中的属性,通过${nextAction}表示的内容来动态的返回结果,例如:

<action name=”fragment” class=”FragmentAction”>
 <result name=”next” type=”redirect-action”>${nextAction}</result>
</action>

上述Action的execute方法返回next的时候,还需要根据nextAction的属性来判断具体定位到哪个Action。





完美世界
粉丝 10
博文 153
码字总数 134758
作品 0
西城
高级程序员
私信 提问
加载中
请先登录后再评论。
Web服务器--Gatling Web Server

Gatling,格林机关枪一样的高效轻量级WEB SERVER,优点是精简高效,完全免配置,支持HTTP/FTP/SMB等协议,支持CGI/FASTCGI,还附带了几个有用的webbench测试工具,非常贴心。 特性: 体积小,...

匿名
2012/12/15
1.4K
0
通过Android源代码分析startActivity()过程(上)

通过Android源代码分析startActivity()过程(上) 一 概述 在Android中,我们去调用startActivit()来启动一个Activity,经过复杂的代码跳转后,最终是由ActivityManagerService(简称ams,下...

Cundong
2016/04/05
1.1K
3
Python使用xslt提取网页数据

1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor。本文记录了确定gsExtractor的技术路线过程中所做的编程实验。这是第一部分,实验了用xsl...

fullerhua
2016/05/16
678
0
Flatscript: ES7 `async`/`await` 替代实现

在经历了 JS 的 callback hell 后看过 , 于我而言这仍不能很好解决一些特定用况, 加之其写起来仍然很冗长, 各种匿名函数横飞. 于是就没有继续使用了, 但又不方便说 "反感 Promise" 或 "对 Pr...

neuront
2016/01/13
397
1
Vert-x-通过异步的方式使用JDBC连接SQL

欢迎关注http://quanke.name/ 交流群: 转载请注明出处,谢谢 在这篇文章中,我们将会看到怎样在vert.x应用中使用HSQL,当然也可以使用任意JDBC,以及使用vertx-jdbc-client提供的异步的API...

quanke_
2016/01/17
5.3K
24

没有更多内容

加载失败,请刷新页面

加载更多

EasyDL入驻社区果蔬店 离线识别秒级智能结算

传统收银方式高成本低效率 急需转型 500米商圈概念被越来越多的企业关注,在中国,一个社区就有可能成为一个商圈,蕴藏着巨大的商机。而在社区中,果蔬作为人们每天都要采购的高频消费商品,...

百度智能云
06/10
0
0
rabbitmq集群环境安装配置

一、主机清单 2台机器同时执行下面安装步骤 10.0.0.216 shiguang-rabbitmq-01 10.0.0.223 shiguang-rabbitmq-02 注意:请将上面内容加入2台机器 /etc/hosts (集群环境必须要加) 1、安装erlan...

caozhangming
2019/08/09
0
0
【rabbitmq-Php】-发布Publish 与订阅Subscribe

发布/订阅,使用扇型交换机(fanout) composer.json ### composer.json { "require": { "php-amqplib/php-amqplib": ">=2.9.0" }} 发布端(Publish) /** * rabbitmq......

DEPAKIN
29分钟前
13
0
如何在PHP中进行重定向? - How do I make a redirect in PHP?

问题: Is it possible to redirect a user to a different page through the use of PHP? 是否可以通过使用PHP将用户重定向到其他页面? Say the user goes to www.example.com/page.php an......

法国红酒甜
39分钟前
9
0
一周面试了 30 人,通过 2 人,面试面到我心态爆炸…

Java技术栈 www.javastack.cn 打开网站看更多优质文章 因技术团队人员调整及项目组扩编,需要招几个 Java 程序员,3~5年左右,领导要求的是能力要比现有的大部分技术人员要强,并且宁缺勿滥...

Java技术栈
05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部