大家好!请问在Struts2中,如何通过一个自定义的Interceptor向结果页面传值。比如,我用一个Interceptor做权限校验,发现权限不合法时不执行Action直接返回结果页面,然后在结果页面中用<s:proptery>标签来读取结果并显示。请指教!

解决方案 »

  1.   

    这个可以直接操作 
    方法1:ServletActionContext.getContext().put(key, value);
    方法2:ActionContext.getContext().put(key, value)
      

  2.   

    在Interceptor 中,将
    ActionInvocation ai;
    ai.getInvocationContext().getContext().put(key, value); 
      

  3.   

    <s:proptery /> value的名字要和key相同才行
      

  4.   

    1.定义拦截器:
    public class MyInterceptor extends AbstractInterceptor {   public String intercept(ActionInvocation arg0) throws Exception {       ActionContext ac = (ActionContext) arg0.getInvocationContext();
           
           Map map = ac.getSession();       if (map == null) {
              ac.put("notLand", "没有权限登录!");
              return "error";
           } else {
              return arg0.invoke();
           }
       }
    }2.jsp显示:
    <s:property value="#notLand" />
      

  5.   

    多谢楼上诸位快速的回复!问题已经得到解决!在这里请允许我再追问一下,
    ServletActionContext.getContext()
    ActionContext.getContext()ActionInvocation ai; 
    ai.getInvocationContext()
    ai.getInvocationContext().getContext()以上4个方法的返回结果是不是都是当前的ActionContext,只是取得的方式不一样,有没有效率、好坏等之分?
    另外
    ai.getInvocationContext()
    ai.getInvocationContext().getContext()
    这两个的返回结果是否有什么不同呢?
      

  6.   

    ai.getInvocationContext() :返回ActionContext
    ai.getInvocationContext().getContext()  :返回ActionContext实例。
      

  7.   

    经过用equals方法的测试,结果为这4个方法返回的结果为同一对象。结贴了,谢谢各位!