本实验接着上一个实验,除了可以在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
没有评论:
发表评论