Primefaces计划组件 - 在延迟模型加载期间处理异常

时间:2012-07-02 11:23:48

标签: jsf jsf-2 primefaces

为我的PF计划加载事件时,有时可能会发生异常。是否可以通过某种方式通知用户(使用growl组件)发生了这种情况?

编辑:

这就是捕获异常的方式:

catch (Exception e) {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Sample error message", "Sample Error"));
    RequestContext.getCurrentInstance().update("scheduleForm:scheduleGrowl");
    e.printStackTrace();
}

这是定义计划组件的xhtml的一部分:

<ui:define name="content">
        <h:form id="scheduleForm">
            <p:growl id="scheduleGrowl" showDetail="true" autoUpdate="true" sticky="true"/> 
            <p:schedule value="#{scheduleController.scheduleModel}"
                view="agendaDay" slotMinutes="15" resizable="false"
                draggable="false" firstHour="8"
                locale="${localeResolver.staticLocale}"
                axisFormat="${localeResolver.defaultTimeFormat}"
                timeFormat="${localeResolver.defaultTimeFormat}"
                >
            </p:schedule>

        </h:form>
    </ui:define>

1 个答案:

答案 0 :(得分:2)

将异常敏感代码放在try-catch中,并使用catch中的FacesContext#addMessage()向上下文添加消息。

E.g。

try {
    // ...
} catch (SomeException e) {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
        FacesMessage.SEVERITY_FATAL, e.getClass().getName(), e.getMessage()));
    // Log the exception as well?
}

如果您无法控制此操作,则需要创建自定义ExceptionHandler。在这个答案中可以找到一些提示:What is the correct way to deal with JSF 2.0 exceptions for AJAXified components?你不一定需要显示一个完整的错误页面(虽然这是优选的,因为这种异常通常是不可恢复的,假设这确实没有错误/错误配置你的代码),你也可以在那里的faces上下文中添加一条消息。