在托管bean中捕获异常并在jsf2中在屏幕上显示消息

时间:2012-11-08 20:32:03

标签: jsf-2 exception-handling

我正在使用JSF 2,当我使用某些Web服务时,我遇到了一些异常,我希望捕获该异常并在我的.xhtml页面上显示该消息。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

为了举例说明BalusC所解释的内容,您可以编写一个在catch语句中调用的简单方法。

private void addErrorMessage(String msg, String clientId) {
        String codingErrorMsgKey = "coding_error_msg";
        FacesMessage fm;
        FacesContext facesContext = FacesContext.getCurrentInstance();
        if (StringUtils.isEmpty(msg)) {
            ResourceBundle bundle = facesContext.getApplication().getResourceBundle(facesContext, "bundle");
            fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, bundle.getString(codingErrorMsgKey), bundle.getString(codingErrorMsgKey));
        }
        else {
            fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, msg);
        }
        facesContext.addMessage(clientId, fm);
    }

该方法的作用非常简单:您可以从应用程序的资源包中为其提供一条消息,然后是全局(仅当clientId为null时)错误(因为FacesMessage.SEVERITY_ERROR){{ 1}}已创建。然后,如果您未提供任何消息,则使用默认字符串将创建的错误消息添加到FacesMessage

由于此方法能够创建与globalId相关的错误消息,因此您不必使用facesContext属性。只需指定globalOnly即可让代码显示所有消息(全局或非全局)。

同样,这只是示例代码。您可能需要调整/改进以使其成为您自己的。此外,您几乎可以复制此方法来处理信息消息。

作为处理错误消息的一般方法,您可以在超类中使此方法可用,然后每个控制器都会扩展。