我定义了一个拦截器,代码如下@Override
public String intercept(ActionInvocation invocation) throws Exception {
List<Category> cityList=systemService.getCategorySortList("city");
HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
        OgnlValueStack stack=(OgnlValueStack)request.getAttribute("struts.valueStack");
        stack.set("cityList",cityList);
        System.out.println(cityList.size());
        System.out.println("到这里了");
return invocation.invoke();
}这个拦截是手动往ValueStack中加入值,我重新配置了默认的拦截器栈 <!-- 配置系统默认拦截器栈 -->
    <interceptors>
         <interceptor name="properties" class="com.zuwoba.presentation.interceptor.PropertiesInterceptor"/>
         <interceptor-stack name="group">
              <!--引用默认拦截器(注意顺序) -->
              <interceptor-ref name="defaultStack"/>
              <interceptor-ref name="properties"/>
         </interceptor-stack>
    </interceptors>
    <!-- 将自定义拦截器栈定义为默认拦截器栈 -->
    <default-interceptor-ref name="group"/>我将我配置的拦截器放在defaultStack之后组成了默认的拦截器栈,按理当指向一个action的时候在显示一个页面的时候,值栈中就会有值,jsp页面就可以取到,但是实际情况不是这样的,
如果当action返回succes而显示页面的时候,页面可取到值
但是当action返回input而显示页面的时候,却不能取到值 <interceptor-ref name="properties"/>
 <interceptor-ref name="defaultStack"/>如果换一下顺序,却可以取到值,我有点不明白,按理说如果把自己配的拦截器放在最后,那么无论怎么样值栈中应该是幼稚的啊?如果放在defaultStack的前面,还可能因为要经过Struts2自己的拦截器栈,值可能会没,但是我运到的情况却相反,这是怎么回事?

解决方案 »

  1.   

    “但是当action返回input而显示页面的时候,却不能取到值”。请问楼主什么情况下返回input啊。
      

  2.   

    我觉得可能是struts2的某个拦截器遇到异常,然后直接return "input",所以,你的拦截器就没执行
      

  3.   

    我的一个链接比如说 注册  我想的是注册指向的action和注册页面表单指向的action相同,也就是我不想单独只是为一个超链接配一个action,超链接和表单提交都指向一个aciton,同时account/register,我想的是这样,当点注册超链接时指向了action,这时候由于什么值都没传所以就会报错,我为这个action配置了一个校验文件,这样不会报错,而是转向input所配置的界面,这个界面正好是注册页面,这样我就实现了我要的效果,也就是说当点击注册超链接时是返回的input
      

  4.   

    怪就怪在这里,我在里面写了System.out.pritln("我到这了");它显示是到了的
      

  5.   

    我感觉是这样的, 如果拦截器的顺序是如下的<interceptor-ref name="defaultStack"/><interceptor-ref name="properties"/>话,点击超链接,这时候由于什么值都没传,所以就会报错,此时的return "input" 是defaultStack拦截器中的,所以,你的拦截器压根没有执行,所以当action返回input而显示页面的时候,却不能取到值。