2010年4月27日星期二

ADF_090:Task Flow使用指南之五:捕获异常 (3)

开发环境:JDevloper 11.1.2.2.0+ Oracle Database 10g Express Edition 10.2.0.1。

本实验接着上一个实验,除了可以在TaskFlow中定义ExceptionHandler捕捉异常之外,还可以自定义全局的ExceptionHandler。

重要步骤说明:

1. 新建自定义的ExceptionHandler类
package view;

import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseId;

import oracle.adf.view.rich.context.ExceptionHandler;


public class CustomExceptionHandler extends ExceptionHandler {
    public CustomExceptionHandler() {
        super();
    }

    public void handleException(FacesContext facesContext, Throwable throwable, PhaseId phaseId) throws Throwable {
        String error_message;
        error_message = throwable.getMessage();
        System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%% handleException " + error_message);
        if (error_message != null && error_message.indexOf("ADF_FACES-30108") > -1) {
            ExternalContext ectx = facesContext.getExternalContext();
            ectx.redirect("faces/SessionExpired.jspx");
        } else {
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, error_message, null));
            //Code to execute if the if condition is not met
            //throw throwable;
        }
    }
}

2. 创建oracle.adf.view.rich.context.ExceptionHandler文件,注意没有扩展名
该文件位于ADF_TaskFlow_PageToTaskFlow\.adf\META-INF\services目录下,其中services是要你创建的。
该文件的内容为view.CustomExceptionHandler,即指向自定义的ExceptionHandler。

3. 运行deparmentList2页面,最后点击ProcessData2按钮
注意,employees-taskflow2-btf没有继承error-handler-task-flow,因此不会执行controllerExceptionHandler方法。
而是会执行CustomExceptionHandler中的handleException方法。

同时,Console日志输出如下:
%%%%%%%%%%%%%%%%%%%%%%%%% handleException java.lang.Exception: Exception! Data Processing Failed

Project 下载:ADF_TaskFlow_PageToTaskFlow(ExceptionHandler3).7z

参考文献:
1. http://blog.csdn.net/qingqingxuelang/article/details/5576564
2. http://blog.csdn.net/zdwzzu2006/article/details/6568600
3. https://blogs.oracle.com/jdevotnharvest/entry/extending_the_adf_controller_exception_handler

没有评论: