为了账号安全,请及时绑定邮箱和手机立即绑定

JSF Ajax请求中的异常处理

JSF Ajax请求中的异常处理

处理JSF ajax请求时引发异常时,如何处理异常并访问堆栈跟踪?现在,当JSF项目阶段设置为Development时,我仅在JavaScript警报中获得异常类名称和消息。更糟糕的是,当JSF项目阶段设置为Production时,没有任何视觉反馈,并且服务器日志不显示有关异常的任何信息。如果相关,那么我在Netbeans中使用GlassFish。
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

OmniFaces FullAjaxExceptionHandler展示柜中充实了这个问题。


基本上,您需要创建一个定制,ExceptionHandler因为标准JSF不会提供一个定制的定制(至少不是明智的选择)。在其中,您将可以接触Exception引起所有麻烦的实例。


这是一个启动示例:


public class YourExceptionHandler extends ExceptionHandlerWrapper {


    private ExceptionHandler wrapped;


    public YourExceptionHandler(ExceptionHandler wrapped) {

        this.wrapped = wrapped;

    }


    @Override

    public void handle() throws FacesException {

        FacesContext facesContext = FacesContext.getCurrentInstance();


        for (Iterator<ExceptionQueuedEvent> iter = getUnhandledExceptionQueuedEvents().iterator(); iter.hasNext();) {

            Throwable exception = iter.next().getContext().getException(); // There it is!


            // Now do your thing with it. This example implementation merely prints the stack trace.

            exception.printStackTrace();


            // You could redirect to an error page (bad practice).

            // Or you could render a full error page (as OmniFaces does).

            // Or you could show a FATAL faces message.

            // Or you could trigger an oncomplete script.

            // etc..

        }


        getWrapped().handle();

    }


    @Override

    public ExceptionHandler getWrapped() {

        return wrapped;

    }


}

为了使其运行,请ExceptionHandlerFactory如下创建一个自定义:


public class YourExceptionHandlerFactory extends ExceptionHandlerFactory {


    private ExceptionHandlerFactory parent;


    public YourExceptionHandlerFactory(ExceptionHandlerFactory parent) {

        this.parent = parent;

    }


    @Override

    public ExceptionHandler getExceptionHandler() {

        return new YourExceptionHandler(parent.getExceptionHandler());

    }


}

需要进行以下注册faces-config.xml:


<factory>

    <exception-handler-factory>com.example.YourExceptionHandlerFactory</exception-handler-factory>

</factory>


查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 554 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信