一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的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(当输入不通过时,action 方法返回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。
在strutx.xml配置文件中,我们可以使用method=”"来设置调用类的哪个方法,这样就可以在一个JAVA类中使用不同的方法来实现不同的功能,就无需每个功能写一类了,例如:
<action name=”fragment” class=”FragmentAction” method=”add”>
<result>/success.jsp</result>
</action>
分享到:
相关推荐
本文将深入解析Struts2中的`result`类型及其含义,旨在帮助开发者更好地理解和应用这些配置,从而优化应用程序的表现和性能。 ### 1. Struts2中的Result概念 在Struts2中,当一个Action执行完毕后,它会根据Action...
"Struts2 strus.xml中result类型及含义.doc"将涵盖不同的Result类型,如dispatcher(默认),redirect,stream等,它们决定了请求处理后的页面重定向方式。 "Struts2教程3:struts.xml常用配置解析 .doc"深入解析了...
本篇文章将详细介绍如何在Struts2中去除.action后缀,以及Struts1中隐藏.do扩展名,使URL更加简洁。 首先,让我们来看看Struts2的情况。在Struts2中,默认情况下,所有的请求都会映射到.action结尾的URL上。为了...
3. `ognl.jar`:Object-Graph Navigation Language (OGNL)是Struts2中使用的表达式语言,用于在视图层和模型层之间传递数据。 4. `freemarker.jar`和`velocity.jar`:这两种是模板引擎,用于生成动态HTML页面。...
This is better than the ServletRedirectResult because it does not require you to encode the URL patterns processed by the ActionMapper in to your struts.xml configuration files. This means you can ...
在Struts2中,API提供了与框架交互的接口和类,使开发者能够轻松地处理请求、响应、数据绑定、拦截器和结果渲染等任务。 Struts2 API的主要组成部分包括: 1. **Action类**:这是业务逻辑的入口点。开发者通常需要...
Interceptor是Struts2中的一个重要特性,它允许在Action执行前后插入自定义的处理逻辑。拦截器可以实现事务管理、日志记录、权限检查等功能,增强了框架的灵活性和可扩展性。 四、Value Stack与OGNL Value Stack是...
6. **OGNL(Object-Graph Navigation Language)**:是Struts 2中的表达式语言,用于在视图层和Action之间传递数据。例如,`s:property value="name"`会显示Action对象中的`name`属性值。 在提供的源代码示例中,你...
在Struts2中,Action类是业务逻辑的核心,它实现了`com.opensymphony.xwork2.Action`接口或其子接口,如`ActionSupport`。Action类中的方法通常映射到特定的HTTP请求,处理完成后返回一个表示结果的字符串。 3. **...
为了实现JSON整合,你需要在Struts2的配置文件(通常为struts.xml或struts-default.xml)中添加JSON结果类型,并在Action类中定义相应的返回类型。同时,确保在Action类的属性上使用`@serializable`注解,以便序列化...
在Struts2中集成JSONPlug是为了使应用能够方便地处理JSON格式的数据,提升Web服务的响应速度和用户体验。 首先,让我们详细了解Struts2集成JSONPlug的过程: 1. **添加依赖**:在Struts2项目中,你需要引入...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
- **struts-config.xml**:这是Struts1的核心配置文件,用于定义Action、Form Bean、Result、Global Exceptions等。例如,你可以在这里定义一个Action,指定其对应的Action类、输入页面和结果页面。 ```xml ...
同时,你需要配置相关的XML文件,例如Struts2的struts.xml、Spring的applicationContext.xml和Hibernate的hibernate.cfg.xml,以指定应用程序的行为和数据源连接。 为了保证项目的稳定性和兼容性,通常还需要注意...
在Struts2中,我们可以使用自定义拦截器、全局结果或配置文件来捕获和处理这种错误。 1. **自定义拦截器**: 在Struts2中,拦截器是处理请求和响应的重要组件。我们可以创建一个专门处理404错误的拦截器,当请求...
在Struts2中,你需要创建一个Action类来处理文件上传的请求。这个类需要继承自`org.apache.struts2.dispatcher.multipart.MultiPartRequest`或者使用Struts2提供的`org.apache.struts2.upload.FormFile`接口。通常...
它可以管理Struts2中的Action实例,实现依赖注入,使得各个组件之间松耦合。此外,Spring还提供了AOP(面向切面编程),允许我们在不修改业务代码的情况下,添加如日志、事务管理等横切关注点。在Spring中,我们需要...
6. **值栈(Value Stack)**:值栈是Struts2中存放Action属性和其他数据的地方,它可以方便地将数据传递给视图层,同时支持OGNL(Object-Graph Navigation Language)表达式,使得数据访问更为灵活。 7. **Struts2...
在IT行业中,构建一个基于Maven的Struts2简单应用是一个常见的任务,它涉及到Web开发中的几个关键组件。Struts2是一个流行的Java框架,用于构建MVC(模型-视图-控制器)架构的Web应用程序,而Maven则是一个强大的...
在Struts2中,`@Action`注解用于标记一个方法作为处理请求的入口点。例如: ```java @Controller public class MyAction { @Action(value = "myAction", results = { @Result(name = "success", location = ...