【问题标题】:How does business logic class calls methods inside a managed bean?业务逻辑类如何调用托管 bean 中的方法?
【发布时间】:2013-05-06 22:53:55
【问题描述】:

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

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

}

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-30
          • 2023-03-27
          • 2014-02-14
          • 2016-08-28
          • 1970-01-01
          • 2015-06-19
          • 2013-01-24
          • 1970-01-01
          相关资源
          最近更新 更多