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