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();
} 展开
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();
} 展开
1个回答
展开全部
你把你的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类的相应属性值就会变成在拦截器中最后改变该属性
的这个值。
众所周知,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类的相应属性值就会变成在拦截器中最后改变该属性
的这个值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询