当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

Handling Ajax Exception in JSF 2.0

发表于: 2013-11-18   作者:sunjing   来源:转载   浏览次数:
摘要:     JSF2.0规范中定义Ajax异常信息的形式为: <partial-response>     <error>         <error-name>...</error-name>  &nbs
    JSF2.0规范中定义Ajax异常信息的形式为:
<partial-response>
    <error>
        <error-name>...</error-name>
        <error-message>...</error-message>
    </error>
</partial-response>
    可参见com.sun.faces.context.AjaxExceptionHandlerImpl的源码。
一、使用JS函数处理Ajax异常
    JSF提供了全局脚本函数addOnError()用于监控Ajax错误,将函数定义在全局模板内可以实现页面共用。
    全局函数定义在jsf.ajax.js文件中,使用全局函数的页面应引用该脚本资源文件:
    <h:head>
        <h:outputScript library="javax.faces" name="jsf.js"/>
    </h:head>
    定义全局回调函数:
  <h:head>
    <h:outputScript>
      var handleError = function(data){
        var componentId = data.source.id;
        var xml = data.responseXML;
        var text = data.responseText;
        var code = data.responseCode;
        var type = data.type;
        var status = data.status;
        var description = data.description;
        var errorName = data.errorName;
        var errorMessage = data.errorMessage;

        var error = ... + ... + ....;
        alert(error);
        location.href = "/welcome.xhtml";
      };
      jsf.ajax.addOnError(handleError);
    </h:outputScript>
  </h:head>
二、利用OmniFaces
    OmniFaces是一个 JSF 2 的工具库,其中定义了Ajax异常处理类 FullAjaxExceptionHandler,能够自动处理异常,使用方式与普通JSF异常一样,利用web.xml error-page机制。
    在pom中引入omnifaces:
<dependency>
    <groupId>org.omnifaces</groupId>
    <artifactId>omnifaces</artifactId>
    <version>1.6.3</version>
</dependency>
    在 faces-config.xml 中注册handler:
<factory>
    <exception-handler-factory>
       
org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory
    </exception-handler-factory>
</factory>
    在web.xml中定义error-page:
<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/WEB-INF/errorpages/expired.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.sql.SQLException</exception-type>
    <location>/WEB-INF/errorpages/database.xhtml</location>
</error-page>
<error-page>
    <exception-type>java.lang.RuntimeException</exception-type>
    <location>/WEB-INF/errorpages/bug.xhtml</location>
</error-page>

    errorpage.xhtml:
 <ui:composition template="/WEB-INF/templates/layout.xhtml"
    xmlns=" http://www.w3.org/1999/xhtml"
    xmlns:h=" http://java.sun.com/jsf/html"
    xmlns:ui=" http://java.sun.com/jsf/facelets"
    xmlns:fn=" http://java.sun.com/jsp/jstl/functions"
    xmlns:of=" http://omnifaces.org/functions">
    <ui:define name="contentTitle">Error</ui:define>
    <ui:define name="content">
        <ui:insert name="errorContent">
            <ul>
                <li>Date/time: #{of:formatDate(now, 'yyyy-MM-dd HH:mm:ss')}</li>
                <li>User agent: #{header['user-agent']}</li>
                <li>User IP: #{empty header['x-forwarded-for'] ? request.remoteAddr : fn:split(header['x-forwarded-for'], ',')[0]}</li>
                <li>Request URI: <a href="#{requestScope['javax.servlet.error.request_uri']}">#{requestScope['javax.servlet.error.request_uri']}</a></li>
                <li>Ajax request: #{facesContext.partialViewContext.ajaxRequest ? 'Yes' : 'No'}</li>
                <li>Status code: #{requestScope['javax.servlet.error.status_code']}</li>
                <li>Exception type: #{requestScope['javax.servlet.error.exception_type']}</li>
                <li>Exception message: #{requestScope['javax.servlet.error.message']}</li>
                <li>Stack trace: <pre><code>#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}</code></pre></li>
            </ul>
        </ui:insert>
        <h:outputScript rendered="#{facesContext.partialViewContext.ajaxRequest}">scrollTo(0, 0);</h:outputScript>
    </ui:define>
</ui:composition>

Handling Ajax Exception in JSF 2.0

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
http://www.softwaretestinghelp.com/exception-handling-framework-selenium-tutorial-19/ In last
From : http://www.codeproject.com/Articles/731913/Exception-Handling-in-MVC Introduction In t
对于所有的开发人员来说,Exception Handling是我们每天都要面对的事情。对于基于Source Code的Exce
对于所有的开发人员来说,Exception Handling是我们每天都要面对的事情。对于基于Source Code的Exce
One of the problems with exception handling is knowing when and how to use it. In this articl
三、 TRY CATCH & Return 在上面一节中,我通过RAISERROR重写了创建User的Stored procedure,实际上
三、 TRY CATCH & Return 在上面一节中,我通过RAISERROR重写了创建User的Stored procedure,实际上
原文: 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
在任何Application的开发中,对不可预知的异常进行troubleshooting时,异常处理显得尤为重要。对于
在任何Application的开发中,对不可预知的异常进行troubleshooting时,异常处理显得尤为重要。对于一
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号