0

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

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

}

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

4

3 回答 3

1

这都是关于分层概念的......

我假设您有一个 ManagedBean,它有一个方法可以将业务逻辑委托给单独的业务类/模块。如果是这种情况,我会告诉你,在业务方面永远不要有任何 Faces 方法......

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

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

于 2013-06-21T03:57:36.797 回答
1

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

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

于 2013-06-21T08:37:03.987 回答
0

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

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

于 2013-06-20T07:17:45.837 回答