在JSF 2中抛出某个业务异常时自动添加FacesMessage

时间:2014-01-10 10:53:58

标签: jsf exception exception-handling message

我想知道JSF2是否可以实现以下功能。 当我的业务类或DAO类抛出某个异常(例如名为BusinessException的自定义异常)时,FacesMessage将添加到当前页面,并带有此异常类的标准消息字符串。业务类和托管bean位于两个不同的项目中。只有托管bean才能访问业务类。

2 个答案:

答案 0 :(得分:0)

您可以在托管bean中使用这样的代码段:

try
{
   ... do your staff here ...

} catch (YourBusinessException ex)
{
   FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Your custom message"));
}

这是一种通用方法,如果您的业务方法抛出YourBusinessException而不是捕获它,它将起作用。

答案 1 :(得分:0)

您可以实现父bean,每个托管bean都可以从中扩展。在那里,为每个服务调用实现一个访问点。

该解决方案当然取决于您拥有多少服务操作以及它们是否被不同的托管bean重用。除此之外,请记住,您可能需要以其他方式处理父项上的异常,这些异常不能仅仅是添加消息。 这个问题在您当前的实施和应用类型中有很多

想一想:

public abstract class ParentBean{

    Service service;

    public void performOperationAtService(){
        try{
            service.operation();
        }catch(YourBusinessException ex){
            FacesContext.getCurrentInstance()
                .addMessage(null, new FacesMessage("An error occured. Please contact your administrator"));
        }
    }

}

@ManagedBean
@ViewScoped
public class ConcreteBean extends ParentBean{

    public void someAction(){
        //Do some stuff
        super.performOperationAtService();
    }

}