だから私は取り組んでいるStruts2アプリケーションを持っています。フロント ページには、アプリケーションがスローする例外を表示するセクションがあります。カスタムインターセプターを追加するまで、これはうまくいきました。
これが私のインターセプターコードです:
public String intercept(ActionInvocation actionInvocation) throws Exception {
String result = actionInvocation.invoke();
return result;
}
これは、例外が生成される Action クラスのコードです。AuthService.Authorize() が呼び出される場所で発生します。
if(AuthService.Authorize(username, password)) {
if(AuthService.AdminAuthorized()) {
return "admin";
}
return SUCCESS;
}
これは AuthService.Authorize() の内部にあり、acc にアクセスすると null ポイント例外がスローされます。
try {
acc = profileRepository.WhereSingle("Username", "=", username);
} catch (Exception e) {
return false;
}
if (acc.Password.equals(password)) {
ただし、ページがロードされたとき。これは入力されていません:
<s:property value="%{exception.message}"/>
私はそれをテストしましたが、単純に Action クラスから例外をスローした場合に機能します。私はredirectActionなどを呼び出していません
これは、他のすべてのパッケージが拡張するデフォルトのパッケージ定義の先頭です
<package name="default" namespace="/" extends="struts-default">
<!-- Interceptors -->
<interceptors>
<interceptor name="conversation" class="global.ConversationInterceptor"/>
<interceptor-stack name="dils-stack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="conversation"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="dils-stack"/>
<global-results>
<result name="Exception" >/index.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="Exception"/>
<exception-mapping exception="java.lang.NullPointerException" result="Exception"/>
</global-exception-mappings>