-
struts2 action之间chain传值错误问题10
请参看代码与配置,遇到的业务问题是访问第一个action(action1),action1对自己的成员变量进行修改后跳转到第二个action(action2)。action2依靠action1的参数来组织数据显示。
出现的问题是无法使用action1的成员变量值对action2赋值。
测试代码package org.wisdoor.web.util; import java.util.ArrayList; import java.util.List; import org.wisdoor.web.WisdoorAction; import util.tree.bean.SimpleTreeNode; public class TestChain extends WisdoorAction { private String testNoChange="noChange"; private String testChange; public String testChain(){ testChange="change by TestChain"; return SUCCESS; } public String secondAction(){ return SUCCESS; } public String getTestNoChange() { return testNoChange; } public void setTestNoChange(String testNoChange) { this.testNoChange = testNoChange; } public String getTestChange() { return testChange; } public void setTestChange(String testChange) { this.testChange = testChange; } }
action配置
<package name="testChain" extends="json-default">
<action name="testChain" class="org.wisdoor.web.util.TestChain" method="testChain">
<result type="chain" >
secondAction
</result>
</action>
<action name="secondAction" class="org.wisdoor.web.util.TestChain" method="secondAction" >
<result type="json">
</result>
</action>
</package>
研究struts2框架及拦截器后发现问题出在struts2默认配置struts-default.xml上,当package继承默认配置时,struts2使用
默认拦截器管理action,即defaultStack中的拦截器,配置如下
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/> <interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref> <interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
struts2会按照栈中的拦截器顺序依次执行拦截器,先执行chain拦截器给action2赋期望的正确值,然后又执行了params拦截器给action2赋request传到后台的错误值。导致action2赋值错误。
现将chain拦截器移至params拦截器后能够正确赋值给action2,但是,改变struts2默认拦截器顺序会不会导致其他不可预估的问题。请解答。希望能附上权威依据。
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="staticParams"/>
<interceptor-ref name="actionMappingParams"/>
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="chain"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
2008年9月16日 13:19
目前还没有答案
相关推荐
struts2使用域模型传值,如何在struts2中使用与模型传值
总结来说,Struts2的传值方式包括Action属性、ValueStack和Ognl以及ActionContext与请求/Session域的使用。选择合适的方式取决于业务需求和代码的可维护性。了解并熟练掌握这些方法,对于提高Struts2应用的开发效率...
2. **创建Action类**:定义一个Struts2 Action类,该类将处理AJAX请求。Action类中的方法通常需要一个`execute`方法,返回一个表示结果的字符串,Struts2会根据这个结果选择合适的Result来展示响应。 ```java ...
### Struts2 传值方式详解 在Struts2框架中,实现前后台的数据传递是构建Web应用的基础之一。本文将详细介绍三种常见的Struts2数据传递方式:通过默认的Action属性传递、使用Value Object(VO)传递以及利用...
在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。下面将详细介绍如何在Struts2中实现Action...
在Struts2框架中,实现弹出Action返回的错误信息是一项常见的需求,特别是在表单验证、数据处理或业务逻辑执行失败时,向用户反馈错误信息至关重要。本文将深入探讨三种在Struts2中实现这一功能的方法,并对每种方法...
本文将围绕“Struts2配置文件传值中文乱码”这一主题,深入探讨其成因、解决方案以及相关的配置细节,旨在帮助开发者有效解决中文乱码问题,提升用户体验。 ### Struts2框架简介 Struts2是Apache组织下的一个开源...
首先,传值问题在Struts2中主要涉及到Action类和JSP页面之间的交互。在Action类中,有两种方式可以将值传递到JSP页面: 1. 不加#的方式获取(所有对象放置在栈顶): - 如果XXaction类中存在与标签对应的成员变量...
总之,Struts 2 中处理中文汉字传值的关键在于理解和正确使用字符编码,包括设置页面编码、响应编码、URL编码和Action中的解码步骤。确保每个环节都与UTF-8编码兼容,可以避免中文字符的乱码问题。在实际开发中,还...
### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 ...同时,了解 `redirect` 和 `redirect-action` 之间的区别对于正确配置 Struts2 应用至关重要,这有助于避免不必要的错误和性能问题。
作为一个基于Action和基于拦截器的框架,Struts2提供了丰富的功能,使得开发者能够构建可维护、可扩展的Web应用。下面我们将深入探讨Struts2的主要特性、工作原理以及如何在实际开发中运用。 1. **核心概念**: - ...
**Struts2实战——《Struts2 In Action中文版》** 《Struts2 In Action》是一本专为Java开发者设计的实战指南,旨在深入解析Struts2框架的使用与实践。Struts2作为一款强大的MVC(Model-View-Controller)框架,极...
在一对多关系的增删改查操作中,Struts2的动作类(Action)接收用户输入,调用业务逻辑层(Service)的方法,并将结果传递给视图层(JSP或Freemarker等)。Struts2的拦截器(Interceptor)可以进一步优化流程,如...
根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...
在使用Struts2框架进行Web开发时,经常需要在前端页面和后端Java代码之间进行数据传输,尤其是涉及到JSON格式的传值。由于中文字符在UTF-8编码和ISO-8859-1编码之间的转换差异,很容易在数据传输过程中出现乱码问题...
1. **Struts2 Action与Result**:首先,你需要定义一个Struts2 Action,这是处理用户请求的核心组件。Action类通常包含一个或多个业务逻辑方法,当用户触发一个请求时,Struts2会调用对应的方法。完成数据处理后,...
本文将详细介绍Struts2中几种常见的Action间传值方式,特别是`chain`和`redirectAction`两种方式的使用场景及限制。 #### 1. 使用`chain`进行Action间传值 `chain`结果类型允许将当前Action的结果转发到另一个...
Action是Struts2的核心组件,用于处理用户的请求,并返回相应的结果。在现代Web应用中,数据通常以JSON(JavaScript Object Notation)格式在客户端和服务器之间交换,因为JSON具有轻量级、易于解析的特性。本篇将...