比如我的一个aciton是做一个add操作,然后会返回一个新增的对象,请问拦截器里能获得这个action执行后的对象吗?求解啊
[code="java"]
public class ViewInterceptor extends AbstractInterceptor{
public String intercept(ActionInvocation invocation) throws Exception {
String s = invocation.invoke();
Object action = invocation.getInvocationContext().get("action");
System.out.println("action---"+action.getClass());
if(action instanceof StudentRegisterListAction){
StudentRegisterListAction sa = (StudentRegisterListAction)action;
System.out.println(sa.getIdCard());
System.out.println(sa.getUserName());
}
Field[] fields = action.getClass().getDeclaredFields();
Method[] methods = action.getClass().getMethods();
for(Field field: fields){
Class c = field.getType();
System.out.println("字段类型--------"+c.getName());
System.out.println("字段名称--------"+field.getName());
if(field.isAccessible()){
System.out.println(field.get(action));
}else{
String methodName = "get"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1,field.getName().length());
System.out.println(methodName);
for(Method m: methods){
// System.out.println("方法名---"+m.getName());
if(m.getName().equals(methodName)){
System.out.println("字段值-----"+m.invoke(action, null));
}
}
}
}
return s;
}
}
[/code]
http://blog.csdn.net/fzjiangmin/article/details/5609258 参考下这个 拦截器的配置 原理
通过设置返回视图之前的监听,能满足你的需求。
参看前人总结:http://struts2.group.iteye.com/group/wiki/1397-deep-into-struts2-interceptors
Struts2的action,是通过实例变量来作为响应结果并返回给下个页面的,拦截器一样可以从实例变量中去取,就当是一个简单的JavaBean处理就行了
有before、after可供使用.