业务逻辑类如何调用托管bean中的方法?

时间:2013-05-12 23:21:46

标签: model-view-controller jsf-2 business-logic managed-bean

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

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

}

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

3 个答案:

答案 0 :(得分:1)

关于分层概念......

我假设你有一个ManagedBean,它有一个方法可以将业务逻辑委托给一个单独的Business Class / Module。 如果是这种情况,我会告诉你,从来没有在业务方面有任何面孔方法......

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

即使你没有遵循上述推定:我的建议 从来没有在Business Components中使用JSF Faces Logic。这将是一个糟糕的主意。

答案 1 :(得分:1)

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

而是让支持bean调用业务逻辑(例如EJB bean或Java EE 7中的事务CDI bean),然后根据此调用的结果(异常,返回值等)生成Faces消息和/或重定向到新页面等。

答案 2 :(得分:0)

由于businesslogic将是无状态的(我猜/希望如此),我会说你应该让调用businesslogic的托管bean处理错误信息显示,例如捕获一个例外。

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