2

我编写了自定义拦截器,并且在后处理时我想通过检查值堆栈上是否存在异常对象来添加 actionError/actionMessage。

 public String intercept(ActionInvocation invocation) throws Exception {

  result= invocation.invoke();

 // postprocessing start 

   invocation.addPreResultListener(new PreResultListener() {

  @Override
  public void beforeResult(ActionInvocation invocationInner, String resultCode) {

   Object obj=invocation.getInvocationContext().getValueStack().findValue("exception");
     if(obj!=null)
     {

         if(obj instanceof Exception)
         {
            try{
                  Object action=invocation.getAction();
                      ((ActionSupport)action).addActionError("Error");
               }

            catch (Exception e) {
                e.printStackTrace();
              }

             }

       }            



 }

 return result;

如果结果是“错误”,我将重定向到 error.jsp

 <s:if test="hasActionErrors()">
   <s:actionerror/>
 </s:if>

但 error.jsp 上没有显示任何内容

即使我正在尝试从拦截器中设置参数,例如

   invocationInner.getInvocationContext().getValueStack().setValue("errorNum", "333");

或者

    Map<String, Object> parameters =    invocationInner.getInvocationContext().getParameters();
             parameters.put("errorNum", "8888");
             invocationInner.getInvocationContext().getValueStack().push(parameters);

并访问jsp上的参数,例如

<s:property value="%{#parameters['errorNum']}"/> 

但是没有效果我在jsp上仍然一无所获是因为对象的范围,因为当我在会话中设置变量时它工作正常。

我实施后处理的方法是错误的还是我遗漏了什么。

4

0 回答 0