日期:2014-05-17  浏览次数:21741 次

struts2里拦截器的返回值的作用是什么?
拦截器的interceptor方法返回一个String,但是这个String的作用是什么。我做了一个试验,Action的execute方法返回"input",拦截器的interceptor方法里的代码:invocation.invoke();return Action.SUCCESS;然后在struts.xml里如下配置:<result name="success">/error1.jsp</result>
<result name="input">/error2.jsp</result>;结果是页面跳转到error2.jsp,说明拦截器返回的success没有用处了?
------解决方案--------------------
action里的返回值就是拦截器invoke后得到的返回值,你可以在拦截器里打印invoke前后的return值
------解决方案--------------------
拦截器的值返回值要么代表继续拦截 要么是success等一些类Action类提供的静态量
它会根据这个值去做出相应的出来
例如 如果是success那么会转向这个action配置的result name="success" 的页面
其他的同样的道路
你可以通过打印的方式去看这个result
System.out.println(invocation.invoke()); 
------解决方案--------------------
你看看你返回的值是不是success?
如果都配置是好的,应该是返回你配置的相关页面
------解决方案--------------------
  lz  可能 是 哪个 地方 搞错了 咯 ,这个 是 肯定不可能的事情 ,lz 在 仔细找找 ,断点调调 看
------解决方案--------------------
对应你配置的文件里的响应的页面啊
------解决方案--------------------
排出下以下几种可能:
1、楼主有使用validate框架,验证不通过时返回input对应的url
2、在interceptor可能有多个返回值的地方,很有可能是return invocation.invoke();了
------解决方案--------------------
友情帮顶,我感觉这代码写的很工整,没有啥错误吧
------解决方案--------------------
把 那个 拦截器 的 顺序 换下 系统 默认 滴 放 最后 面 你的 放前面 
------解决方案--------------------
拦截器方法直接写一句return “add”;看看
------解决方案--------------------
楼主的代码与配置无问题,在家用你的代码运行了下,和你描述的情况一样。查看原码发现STRUTS2的运行机制就是这样的,如果你有调用action里对应的方法,action有返回值就按其返回值去执行相应的result,如果不调用action里对应的方法就以最后一个拦截器返回值去执行相应的result.测试代码如下:

public class MyInterceptor implements Interceptor {

public void destroy() {
System.out.println("调用拦截器的destroy方法");
}

public void init() {
System.out.println("调用拦截器的init方法");
}

public static boolean condition = true;// 用于循环使用

public String intercept(ActionInvocation invocation) throws Exception {
if (condition) {
condition = false;
Long start = System.currentTimeMillis();
System.out.println("开始计数");
String r = invocation.invoke();// 返回"success"
Long end = System.currentTimeMillis();
System.out.println(end - start);
System.out.println("计数完毕");
System.out.println(r); // 打印的也是"success"
} else {
condition = true;
}
return "add"; // 然后这边写成任意的字符串,都会返回到视图为success的界面,为何?
}
}