2

나는 사용자 정의 인터셉터를 가지고 있는데, 여기서 나는 예외를 던진다.인터셉터에서 제기 된 예외가 <global-exception-mappings>에 포착되지 않는 이유는 무엇입니까?

해당 인터셉터를 실행하는 작업은 컨벤션 플러그인에 의해 관리됩니다.

인터셉터가 발생시킨 Exception은 Action이 실행중인 패키지의 struts.xml에 전역 적으로 정의됩니다.

결과 : 예외 매핑은 무시되고 나는 얻을 스트럿츠가 처리되지 않은 예외가 감지

스트럿츠 문제 보고서 :

... 

스택 추적

java.lang.IllegalArgumentException가 내 메시지 난 그냥 바보 뭔가를 놓친 것 같아

는 ... 우리는 이미이 in a similar question의 논의했지만,이 수 또는 수없는 경우는 아직 분명하지 않다

struts.xml

<package name="my-package" namespace="my" extends="struts-default"> 
    <interceptors> 

     <interceptor name="myInterceptor" class="foo.bar.MyInterceptor"/> 

     <interceptor-stack name="myStack"> 
      <interceptor-ref name="myInterceptor"/> 
      <interceptor-ref name="defaultStack"/> 
     </interceptor-stack> 

    </interceptors> 

    <default-interceptor-ref name="myStack"/> 

    <global-results> 
     <result name="input">/WEB-INF/content/my-input.jsp</result> 
     <result name="error">/WEB-INF/content/my-error.jsp</result> 
    </global-results> 

    <global-exception-mappings> 
     <exception-mapping exception="java.lang.IllegalArgumentException" 
           result="error" /> 
     <exception-mapping exception="java.lang.Exception" result="error" /> 
    </global-exception-mappings>  
</package> 

액션

@ParentPackage("my-package") 
@Namespace("/my/blabla/yadayada") 
public class MyAction extends MyBaseAction { 

} 
:이 방식으로 작동

인터셉터

@Override 
public String intercept(ActionInvocation actionInvocation) throws Exception { 
    // .... 
    if (somethingWrong) { 
     throw new IllegalArgumentException("All work and no play makes Jack a dull boy"); 
    } 
} 

는 또한 추상 BaseAction 글로벌 결과/글로벌 예외 매핑을 정의, 또는 물리적 인 실제 작업 자체,하지만 그들은 너무 무시하고 시도했습니다.

추가/제거/변경해야 할 사항에 대한 아이디어가 필요합니까? 이것은 비밀스러운 것이 아닙니다. 이것은 기본입니다 : |

+0

2.3.16.3 (struts2-jquery 플러그인 3.7.1 ... 4.0.0을 기다리는 중 비 호환으로 인해 2.3.20으로 업데이트 할 수 없음) –

+0

지도 작성 방법이 * * 없습니다. 인터셉터가 알려진 결과로 반환 한 예외? 인터셉터에서 결과를 반환 할 수는 있지만 프로젝트 구성에서 더 이상 분리되지 않습니다 ... 예외가 반환되면 맵핑 될 수도 있고 그렇지 않을 수도 있습니다 (따라서 미화 또는 원시로 표시 될 수 있습니다). 결과를 반환하면 그것은 config ...에 정의되어야한다. 그래서 BTW는 그것을 upvote 할 수 있고 (대부분) accept 할 수있다. –

+0

오프 토픽 : * ... struts2-jquery 플러그인 3.7.1과의 비 호환성 * 알고 계십니까? 그들의? 방금 s2-jqr 기능 중 일부를 사용하여 응용 프로그램을 업그레이드했는데 제대로 작동하는 것 같습니다. 지금은. ;) –

답변

3

예외 매핑 기능의 주요 후보는 예외를 발생시키는 작업입니다.

Docs :

예외 매핑 예외가 발생 Action 클래스 처리를위한 강력한 기능입니다. 핵심 개념은 Action 메서드에서 throw 된 Exception을 자동으로 catch하여 미리 정의 된 Result에 매핑 할 수 있다는 것입니다.

그러나 인터셉터에서 발생하는 예외는 exception 인터셉터에서도 처리 할 수 ​​있습니다. 다른 인터셉터 예외를 잡으려면 exception 인터셉터를 스택의 첫 번째 인터셉터로 정의해야합니다.ExceptionMappingInterceptorjavadoc에서

:

당신이 예외, 다른 인터셉터에 의한 심지어를 잡을 수있는 모든 권한을 가지고 보장이 인터셉터를 스택의 첫 번째 요격을하는 것이 좋습니다.

+2

내 퍼팅으로 작동했습니다. 두 번째로, 예외 인 인터셉터 다음에 인터셉터. 고맙습니다! –