Как передать исключение методу метода в Spring Webflow? - PullRequest
0 голосов
/ 08 декабря 2011

Проблема с передачей исключений в Spring WebFlow 3

Предопределенный метод вызывает исключение, подобное следующему:

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;
    }

}

Переход после захвата исключения в веб-потоке выглядит следующим образом

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

В действии showError извлекает сообщение из исключения и минимальных и максимальных значений. Как это сделать. Пожалуйста, помогите.

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

1 Ответ

1 голос
/ 26 декабря 2011

Есть несколько способов сделать это.

Лучшим способом , если вы можете это сделать, является реализация / переопределение метода toString () MyBusinessException. Каждое исключение имеет метод toString (), поэтому независимо от того, какое FlowExecutionException вы получите в своем методе showError, вы все равно получите содержательное описание ошибки в строке.

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();
}
...