Jakarta ee Struts2拦截器后处理

Jakarta ee Struts2拦截器后处理,jakarta-ee,exception-handling,struts2,interceptor,valuestack,Jakarta Ee,Exception Handling,Struts2,Interceptor,Valuestack,我编写了自定义拦截器,在后期处理时,我想通过检查值堆栈上是否存在异常对象来添加actionError/actionMessage public String intercept(ActionInvocation invocation) throws Exception { result= invocation.invoke(); // postprocessing start invocation.addPreResultListener(new PreResultList

我编写了自定义拦截器,在后期处理时,我想通过检查值堆栈上是否存在异常对象来添加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”,我将重定向到error.jsp

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

Map parameters=invocationInner.getInvocationContext().getParameters();
参数put(“errorNum”、“8888”);
调用内部.getInvocationContext().getValueStack().push(参数);
和在jsp上访问参数类似

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

但并没有影响,我仍然并没有得到任何关于jsp的信息,这是由于对象的作用域造成的吗 因为当我在会话中设置变量时,它工作得很好


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

为什么要创建拦截器?您可以直接在JSP中检查
异常
堆栈值。是的,我们可以,但我正在尝试按照异常显示我自己的错误消息,以及为什么您不能在操作或JSP中执行此操作?从操作来看,它的工作没有问题,但我正在尝试应用所有操作,因为我不想在每个操作中处理异常
    Map<String, Object> parameters =    invocationInner.getInvocationContext().getParameters();
             parameters.put("errorNum", "8888");
             invocationInner.getInvocationContext().getValueStack().push(parameters);
<s:property value="%{#parameters['errorNum']}"/>