Model view controller 业务逻辑类如何在托管bean中调用方法?

Model view controller 业务逻辑类如何在托管bean中调用方法?,model-view-controller,jsf-2,business-logic,managed-bean,Model View Controller,Jsf 2,Business Logic,Managed Bean,我有一些业务逻辑代码,根据facelet的输出在facelet上呈现一些facesMessages,因此我在facelet托管bean中创建了一个方法,如下所示: public void renderFacesMessages(String summary, String detail) { FacesMessage message = new FacesMessage(summary, detail); FacesContext.getCurrentInstance().add

我有一些业务逻辑代码,根据facelet的输出在facelet上呈现一些facesMessages,因此我在facelet托管bean中创建了一个方法,如下所示:

public void renderFacesMessages(String summary, String detail) {
    FacesMessage message = new FacesMessage(summary, detail);
    FacesContext.getCurrentInstance().addMessage(null, message);

}

业务逻辑类将根据需要的消息向该方法传递参数,问题是业务逻辑在托管bean上调用该方法的正确方法是什么?

因为业务逻辑将是无状态的(我猜/希望如此),我想说的是,您应该让调用您的businesslogic的托管bean通过捕获异常来处理错误消息显示


另一方面,您可以将托管bean传递给businesslogic(或者更好,只是托管bean的一个接口),因此businesslogic可以回调托管bean。但我更喜欢第一种方法。

这都是关于分层的概念

我假设您有一个ManagedBean,它有一个将业务逻辑委托给单独的业务类/模块的方法。 如果是这样的话,我会告诉你,在商业方面永远不会有任何方法

相反,将业务结果包装在一个类中,并返回到托管Bean。此结果类将包含结果、有关结果的元信息,如错误、异常。因此,现在托管Bean可以使用renderFacesMessage方法

即使你没有遵循上述假设:我的建议
永远不要在业务组件中使用JSF Faces逻辑。这是个坏主意。

不要让业务逻辑调用JSF支持bean

相反,让支持bean调用业务逻辑(例如JavaEE7中的EJB bean或事务CDIBean),然后根据调用的结果(异常、返回值等)生成Faces消息和/或重定向到新页面等