`
eggbucket1
  • 浏览: 81205 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

Struts2的ResultType和Action处理链

 
阅读更多

Struts2的结果类型
struts-default.xml中定义了Struts2内置的所有可用的<result-type/>
所有的Struts2结果处理类都要直接或间接的实现com.opensymphony.xwork2.Result接口
struts-default.xml中的<result-types/>里面,有这样一行声明
Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred.
即:不建议使用以下两种结果类型,在Struts-2.1.0中它们将被移除,应采用Java命名规则,即骆驼命名方式,也即驼峰命名规则
另外Struts2还有一些插件,这些插件还支持一些其它结果类型,这里暂时先不涉及它们


结果类型为input的页面的作用
Struts2应用在运行过程中若发现addFieldError()中有信息或者类型转换失败或着输入校验失败等情况
那么它会自动跳转到name为input<result/>,然后转到INPUT所对应的页面
若JSP页面中表单是用普通<form>编写的,发生错误而返回该页面时,则原数据将消失
若JSP页面中表单是用<s:form/>编写的,发生错误而返回该页面时,则原数据仍存在
若没有提供name值为input的<result/>,那么发生错误时,将直接在浏览器中提示404错误


结果类型中的httpheader
httpheader结果类型很少使用到,它实际上是返回一个HTTP响应的头信息
若单纯的设置<result type="httpheader">/result.jsp</result>,执行时控制台会报如下错误
Caught OgnlException while setting property 'status' on type 'org.apache.struts2.dispatcher.HttpHeaderResult'.
java.lang.NoSuchMethodException: setStatus(java.lang.String)

翻译:应用程序在设置status属性时捕获了OgnlException异常
查看HttpHeaderResult类源代码发现,它果然定义了private int status = -1
它代表的是一个状态码,较常见的状态码如下
200对应OK
404对应File Not Found或者requested resource() is not available
500对应服务器内部错误
这时我们在<action/>中修改为<result type="httpheader"><param name="status">404</param></result>即可
这样当Action执行完毕,就会转向到SUCCESS结果,所以页面就会显示404错误提示
关于httpheader结果类型,了解即可,平时很少用到的不是很多


结果类型中的plainText
当设定为type="plainText"之后,就可以显示原始文件内容,例如文件源代码
<result name="success" type="plainText">/testSuc.jsp</result>
这时访问应用,当跳转到testSuc.jsp页面后,右键就可以查看到它的Java代码了
它比较适用于Java教学网站,但若仅设置type="plainText"的话,页面中显示中文时会乱码
这时就可以借助它的charSet属性以解决中文显示时的乱码问题
如果不设置charSet属性,反而去配置struts.i18n.encoding全局属性,是不能解决问题的
设置charSet属性的目的就是让JSP页面的编码明文显示时的编码一致


结果类型中redirect和redirectAction的区别
redirect是在处理完当前Action之后,重定向到另外一个实际的物理资源
redirectAction也是重定向,但它重定向到的是另外一个Action
只要是重定向,那么之前凡是保存在request里面的东西就全都消失了
因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了
也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西
另外dispatcher结果类型的default属性为TRUE故<result-type/>缺省为dispatcher
所以如果没有设置type属性的话,那么默认的是请求转发,即浏览器显示的是*.action
但是在设置type="redirect"属性后,就可以重定向了,即浏览器显示的是/login2.jsp


Struts2的Action处理链
从一个Action跳转到另一个Action,有两种办法,即将type设置为chain或者redirectAction
chain结果类型表示将多个Action作为一个链来处理
而使用chainredirectAction的好处就是:它会按照框架的默认后缀去自动匹配后缀
而chain和redirectAction的区别与dispatcher和redirect的区别是一样的
即同样是跳转到一个Action上,但chain是服务器跳转,而redirectAction是客户端跳转
服务器跳转的过程中,可以共享数据,这时后面的Action就可以接收前面Action中的属性信息进行二次处理


以下是chain结果类型的使用示例
或者使用<result type="redirect">secondchain.action</result>即手工添加.action亦可正常访问
但不建议这么做,因为若修改应用的Action后缀,这里也需手动的把后缀改掉,麻烦得很
尽管在官方帮助文档的案例中,曾使用过这种方式来执行下一个Action,但这是不严谨的


下面的例子是访问不同命名空间下的Action


客户端跳转中的参数传递
若第二个Action使用type="redirect",那么在页面中将无法接收Action中所共享的数据
但在客户端跳转中,我们可以在链接上传参。比如result写成/test1Suc.jsp?name=${username}
在Struts2的XML文件中可以使用${}表达式,它会自动的取出Action中所有可用的属性,作为参数传递到下一页面
这里${}不是EL表达式,实际上它的本质上是OGNL表达式
由于从链接中取值,故用<%=request.getParameter("name")%>或者${param.name},这里param相当于request.getParameter("")
注意也不能使用${name},因为它是用来从page、request、session、application中取值的
并且页面中也不能使用<s:property value="name"/>接收参数值,因为它是从ValueStack中取值的
下面是代码示例

分享到:
评论

相关推荐

    自定义的struts2的resulttype

    在Struts2中,ResultType是Action执行后跳转到不同页面或执行不同操作的一种策略。默认情况下,Struts2提供了一些内置的ResultType,如“dispatcher”(用于转发到JSP或其他资源)、“stream”(用于处理流式数据,...

    struts2_action代码

    在本压缩包"Struts2_0300_Action"中,包含的是关于Struts2 Action的实践代码,这对于初学者了解和掌握Struts2框架的核心概念和工作原理非常有帮助。 首先,Action是Struts2的核心组件之一,它是业务逻辑的执行者。...

    struts2所需的包和Struts2_json所需包

    导入这些包后,开发者可以按照Struts2的配置方式设置Action,通过`@ResultType("json")`注解或在配置文件中指定`result`类型为`json`,Struts2就会自动将Action的返回值转化为JSON格式并发送到客户端。 在实际开发...

    struts2中result类型之redirectAction

    1. 当Action执行完成后,如果配置了`resultType="redirectAction"`,Struts2会生成一个重定向URL。 2. 这个URL包含了Action的名字、Namespace以及可能的参数。 3. 浏览器收到这个重定向响应,然后根据URL发起新的...

    struts2 2.3.1api

    - **Action**:在Struts2中,Action是业务逻辑的载体,它接收来自视图层的请求,处理数据并返回一个Result。开发者可以自定义Action类,实现特定的业务逻辑。 - **Result**:Result表示Action执行后返回的结果,它...

    struts2 Result类型

    在Struts2中,业务逻辑通常封装在Action类中,Action类负责处理用户请求并返回一个结果。这个结果可以是成功的处理、错误的提示,或者是重定向到其他页面。Result类型就是用来定义这些结果的处理方式。 Struts2内置...

    struts2中AJAX实现

    通过结合Struts2和AJAX,开发者可以创建更高效、交互性更强的Web应用程序。 在Struts2中实现AJAX,主要涉及以下几个关键点: 1. **Struts2 Action和Result**:首先,你需要创建一个Struts2 Action类,它将处理...

    struts2-json

    在Struts2的配置文件(struts.xml或struts.properties)中,需要为Action添加一个`@ResultType`注解或结果类型配置,指定为`json`。这样,当Action执行完成后,会返回JSON格式的数据。 3. **JSON Value Stack**: ...

    struts2.jar

    10. **异常处理**:Struts2提供了全局的异常处理机制,可以捕获和处理Action执行过程中的异常,返回统一的错误页面。 学习这个实例时,你需要理解Action的创建、配置文件的编写、拦截器的使用,以及如何通过JSP或...

    Struts1与Struts2的12点区别

    - Struts2引入了拦截器,增强了可扩展性和模块化,通过拦截器链可以实现登录验证、权限控制等多种功能。 11. **动作映射(Action Mapping)**: - Struts1的动作映射是在struts-config.xml中定义的,静态且不易...

    struts2-jsondemo

    5. **Action中的JSON处理**:在Action中,我们可以使用Struts2提供的`@ResultType("json")`注解或者在配置文件中声明结果类型,使得Action可以直接返回Java对象,Struts2会自动将其转换为JSON。 6. **JSONParam注解...

    struts2源码解析.pdf

    - ActionProxy是Struts2框架中的代理对象,负责创建和管理Action实例,以及协调Action的执行过程。 4. **ActionInvocation**: - ActionInvocation代表了一个Action的执行流程,包括Action的调用、结果的处理等。...

    maven-web项目 Struts2 Struts注解 Struts2返回json

    通过以上讲解,我们可以看到这个项目涵盖了Maven的依赖管理,Struts2的Action和注解配置,以及Struts2对JSON的支持。这为我们提供了一个完整的示例,展示了如何在现代Java Web开发中使用这些技术。

    struts2返回json

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在Struts2中,返回JSON(JavaScript Object Notation)数据类型是一种常见的需求,尤其是在开发AJAX或者前后端分离...

    Struts2配置详解

    - **相关博客和教程**:互联网上有大量的关于Struts2的文章和教程,可以帮助理解具体细节和最佳实践。 通过上述内容,我们可以看到Struts2配置文件的强大功能和灵活性。通过对配置文件的合理设计和管理,可以极大地...

    如何使用struts2的零配置插件convention

    如果Action处理后不是进入视图,而是跳转到另一个Action,即形成Action链,只需遵循以下约定: - **无视图资源**:第一个Action返回的逻辑视图字符串没有对应的视图资源。 - **同包规则**:第二个Action与第一个...

    Struts2 result和type

    通过对Struts2中`Result`与`Type`的理解和运用,可以更加灵活地控制页面的流向和展示形式,从而提高应用程序的可维护性和扩展性。希望本文能帮助读者更好地掌握这些核心概念,并在实际项目开发中发挥出应有的作用。

    json+struts2整合jar包

    Struts2提供了一个插件——Struts2-JSON-Plugin,用于支持JSON序列化和反序列化,使得Action类可以直接返回JSON格式的数据,而无需额外的处理。 描述中的"json2.4+struts2-json-plugin-2.3.4"指的可能是JSON库的...

    Struts2+JSON+YUI组合应用之二构建RichClient

    2. **YUI作为前端展示**:利用YUI的组件和API,可以创建丰富的用户界面,如使用YUI的DataTable展示从服务器获取的JSON数据,或者使用YUI的Form组件进行表单验证,并通过AJAX发送到Struts2 Action进行处理。...

    struts2的深入理解内核解析

    Struts2通过ResultType映射,将不同的结果类型转化为实际的处理方式。 9. **视图渲染**:ValueStack中的数据会自动绑定到JSP或其他视图技术中,使得开发者可以轻松地在视图层展示数据。 10. **响应发送**:最后,...

Global site tag (gtag.js) - Google Analytics