エラーの処理では個別のActionごとで処理するエラーと、共通でエラー画面を出す場合があると思いますが、
個別のエラー処理はAction内でやるとして、Actionでcatchしなかった例外が発生した場合に共通のエラー画面を出す方法を紹介します。
xwork.xml(global-results)
global-resultsに共通のエラー画面を追加します。
<global-results> <result name="error" type="dispatcher">/WEB-INF/vm/error.vm</result> </global-results>
Interceptorの作成
例外が発生した場合にエラー画面を表示させるInterceptorです。
public class ExceptionHandleInterceptor extends AroundInterceptor { protected void before(ActionInvocation actionInvocation) { } protected void after(ActionInvocation actionInvocation, String result) { } public String intercept(ActionInvocation actionInvocation) throws Exception { try { return super.intercept(actionInvocation); } catch (Exception e) { return Action.ERROR; } } }
xwork.xml(Interceptor)
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd"> <xwork> <include file="webwork-default.xml"/> <interceptor name="exception-handle" class="ww2.example.aop.ExceptionHandleInterceptor" /> <interceptor-stack name="exceptionHandleDefaultStack"> <interceptor-ref name="exception-handle"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> <package name="default" extends="webwork-default"> <default-interceptor-ref name="errorHandleDefaultStack"/> </package> </xwork>