2011-12-08 4 views
0

春のWebflowにおける例外の伝達に問題が3Spring Webflowのメソッドのメソッドに例外を渡すには?

事前定義方法は、以下のような例外をスロー:

public class MyBusinessException extends BusinessException { 

    private static final long serialVersionUID = -1276359772397342392L; 

    private Long min = null; 

    private Long max = null; 

    public static final String CODE_1 = "code.1.business.exception"; 

    public static final String CODE_2 = "code.2.business.exception"; 

    public MyBusinessException (String code, Exception ex) { 
     super(code, ex); 
    } 

    public MyBusinessException (String code) { 
     super(code); 
    } 

    public MyBusinessException (Long min, Long max, final String messageCode) { 
     super(messageCode); 
     this.min = min; 
     this.max = max; 

    } 

    public Long getMin() { 
     return min; 
    } 

    public Long getMax() { 
     return max; 
    } 

} 

のWebflowルックスで例外を捕捉した後の移行アクションshowErrorでこの

<transition on-exception="MyBusinessException" to="start" > 
      <evaluate expression="actionService.showError(flowExecutionException)" result="flashScope.refreshError"/> 
</transition> 

のような例外と最小値と最大値からメッセージを取得します。どうやってするの。助けてください。

public String showError(FlowExecutionException flowExecutionException) { 
     flowExecutionException.? 
     return "someString"; 
    } 

答えて

1

これを行うにはいくつかの方法があります。

最高の方法は、あなたがそれを行うことができますMyBusinessExceptionのtoString()メソッドを実装する/オーバーライドすることです。すべての例外にはtoString()メソッドがあります。したがって、showErrorメソッドで取得されたFlowExecutionExceptionがあれば、それでも文字列内のエラーの意味のある説明が得られます。

public String showError(FlowExecutionException flowExecutionException) { 
    return flowExecutionException.toString(); 
} 

フォールバック方式。 MyBusinessException内のコードにアクセスできない場合は、instanceof演算子を使用して、MyBusinessExceptionがFlowExecutionExceptionの有効なクラス、スーパークラス、インターフェース、またはスーパーインターフェースであるかどうかを判別します。

public String showError(FlowExecutionException flowExecutionException) { 
    if (flowExecutionException instanceof MyBusinessException) { 
     MyBusinessException usableException = (MyBusinessException)flowExecutionException; 

     int min = usableException.getMin(); 
     int max = usableException.getMax(); 

     return "MyBusinessException min="+min+", max="+max; 

    } else return flowExecutionException.toString(); 
} 
関連する問題