0 0

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中使用与模型传值

    Struts2的三种传值方式比较(附demo)

    总结来说,Struts2的传值方式包括Action属性、ValueStack和Ognl以及ActionContext与请求/Session域的使用。选择合适的方式取决于业务需求和代码的可维护性。了解并熟练掌握这些方法,对于提高Struts2应用的开发效率...

    ajax请求传值Struts2+jsp

    2. **创建Action类**:定义一个Struts2 Action类,该类将处理AJAX请求。Action类中的方法通常需要一个`execute`方法,返回一个表示结果的字符串,Struts2会根据这个结果选择合适的Result来展示响应。 ```java ...

    struts2-传值方式

    ### Struts2 传值方式详解 在Struts2框架中,实现前后台的数据传递是构建Web应用的基础之一。本文将详细介绍三种常见的Struts2数据传递方式:通过默认的Action属性传递、使用Value Object(VO)传递以及利用...

    struts2 action跳转action传参数

    在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。下面将详细介绍如何在Struts2中实现Action...

    struts2如何实现弹出action返回的错误信息

    在Struts2框架中,实现弹出Action返回的错误信息是一项常见的需求,特别是在表单验证、数据处理或业务逻辑执行失败时,向用户反馈错误信息至关重要。本文将深入探讨三种在Struts2中实现这一功能的方法,并对每种方法...

    struts2配置文件传值中文乱码

    本文将围绕“Struts2配置文件传值中文乱码”这一主题,深入探讨其成因、解决方案以及相关的配置细节,旨在帮助开发者有效解决中文乱码问题,提升用户体验。 ### Struts2框架简介 Struts2是Apache组织下的一个开源...

    struts2传值

    首先,传值问题在Struts2中主要涉及到Action类和JSP页面之间的交互。在Action类中,有两种方式可以将值传递到JSP页面: 1. 不加#的方式获取(所有对象放置在栈顶): - 如果XXaction类中存在与标签对应的成员变量...

    struts 2中文汉字传值

    总之,Struts 2 中处理中文汉字传值的关键在于理解和正确使用字符编码,包括设置页面编码、响应编码、URL编码和Action中的解码步骤。确保每个环节都与UTF-8编码兼容,可以避免中文字符的乱码问题。在实际开发中,还...

    struts2 result转向到action

    ### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 ...同时,了解 `redirect` 和 `redirect-action` 之间的区别对于正确配置 Struts2 应用至关重要,这有助于避免不必要的错误和性能问题。

    Struts2 in action(struts2实战)

    作为一个基于Action和基于拦截器的框架,Struts2提供了丰富的功能,使得开发者能够构建可维护、可扩展的Web应用。下面我们将深入探讨Struts2的主要特性、工作原理以及如何在实际开发中运用。 1. **核心概念**: - ...

    Struts2实战(Struts2 In Action中文版)

    **Struts2实战——《Struts2 In Action中文版》** 《Struts2 In Action》是一本专为Java开发者设计的实战指南,旨在深入解析Struts2框架的使用与实践。Struts2作为一款强大的MVC(Model-View-Controller)框架,极...

    spring+struts2+hibernate 一对多增删改查

    在一对多关系的增删改查操作中,Struts2的动作类(Action)接收用户输入,调用业务逻辑层(Service)的方法,并将结果传递给视图层(JSP或Freemarker等)。Struts2的拦截器(Interceptor)可以进一步优化流程,如...

    Struts 2实战 Struts 2 in action 的中文版

    根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...

    struts2中通过json传值解决乱码问题的实现方法

    在使用Struts2框架进行Web开发时,经常需要在前端页面和后端Java代码之间进行数据传输,尤其是涉及到JSON格式的传值。由于中文字符在UTF-8编码和ISO-8859-1编码之间的转换差异,很容易在数据传输过程中出现乱码问题...

    struts2框架json传递后台数据到echarts

    1. **Struts2 Action与Result**:首先,你需要定义一个Struts2 Action,这是处理用户请求的核心组件。Action类通常包含一个或多个业务逻辑方法,当用户触发一个请求时,Struts2会调用对应的方法。完成数据处理后,...

    acton之间传值

    本文将详细介绍Struts2中几种常见的Action间传值方式,特别是`chain`和`redirectAction`两种方式的使用场景及限制。 #### 1. 使用`chain`进行Action间传值 `chain`结果类型允许将当前Action的结果转发到另一个...

    struts2 action 返回json方法(一)源码

    Action是Struts2的核心组件,用于处理用户的请求,并返回相应的结果。在现代Web应用中,数据通常以JSON(JavaScript Object Notation)格式在客户端和服务器之间交换,因为JSON具有轻量级、易于解析的特性。本篇将...

Global site tag (gtag.js) - Google Analytics