struts2拦截器里修改对象的值成功,但是进入action后修改的值又变回原来的值了

下面代码已经成功执行,并且parameters里的值已经是成功修改过的值,而进入action值又变回原来的了!请大神帮忙,谢谢了publicStringintercept... 下面代码已经成功执行,并且parameters里的值已经是成功修改过的值,而进入action值又变回原来的了!请大神帮忙,谢谢了
public String intercept(ActionInvocation invocation) throws Exception {

Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
Set entrySet = parameters.entrySet();
String[] strings = null;
String[] values = null;
int strLength = 0;
for (Iterator it = entrySet.iterator(); it.hasNext();) {
Entry entry = (Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
if (value instanceof String[]) {
values = (String[]) value;//类型转换
strLength = values.length;
strings = new String[strLength];
for (int i = 0; i < strLength; i++)
{
strings[i] = values[i].trim();
}
parameters.put((String) key, strings);
}
}
invocation.getInvocationContext().setParameters(parameters);
return invocation.invoke();
}
展开
 我来答
RookiePHP
2013-10-23 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:104万
展开全部
你把你的action的代码也发一下,估计写发错了

众所周知,Strut
2的Action类通过属性可以获得所有相关的值,如请求参数、Action配置参数、向其他Action传递属性值(通过chain结果)等等。要获得
这些参数值,我们要做的唯一一件事就是在Action类中声明与参数同名的属性,在Struts
2调用Action类的Action方法(默认是execute方法)之前,就会为相应的Action属性赋值。

 
 要完成这个功能,有很大程度上,Struts
2要依赖于ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当
Struts
2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到
ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。只是所有的属性值都是默认的值,如String类型的属性值为
null,int类型的属性值为0等。

  在处理完上述工作后,Struts
2就会调用拦截器链中的拦截器,当调用完所有的拦截器后,最后会调用Action类的Action方法,在调用Action方法之前,会将
ValueStack对象顶层节点中的属性值赋给Action类中相应的属性。大家要注意,在这里就给我们带来了很大的灵活性。也就是说,在Struts

2调用拦截器的过程中,可以改变ValueStack对象中属性的值,当改变某个属性值后,Action类的相应属性值就会变成在拦截器中最后改变该属性
的这个值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式