【问题标题】:Where to fit in Jasper Reports - front end or business?Jasper Reports 适合放在哪里——前端还是业务?
【发布时间】:2009-07-24 17:52:11
【问题描述】:

我正在尝试使用 Jasper Reports (v3.5.2) 生成 PDF/HTML 格式的报告并将其打印到 web 应用程序的浏览器。这个 web 应用程序已经使用 JSF(Woodstock) 作为前端和 EJB 3(使用 JPA 和 Hibernate 作为 MySQL db 的持久性提供程序)。

我的问题是 - 生成基于 Jasper 的报告的代码应该在哪里?我对此完全感到困惑。我应该把它放在 JSF 前端吗?还是应该是业务逻辑中的“报告”模块作为会话 bean?

我认为将业务层作为一个单独的模块进行此操作是正确的。我将使用报告名称、输入参数映射和报告格式作为业务方法的参数调用业务方法,并获得生成的 pdf/html 作为回报,然后我可以将其发送到浏览器。我在这方面走在正确的轨道上吗?

您能否提出一个如何执行此操作的模式?

另外,我想使用 EJBQL,因为我已经在使用 JPA。

谢谢。

【问题讨论】:

    标签: java jasper-reports ejb


    【解决方案1】:

    如果您要将碧玉生成器嵌入到您的耳朵中,那么我会说它应该按照您的建议抽象到一个类中。我不确定我是否会为它创建一个单独的 EJB,除非您正在执行集群或以其他方式将报告生成卸载到另一个 JVM,或者您有一些特殊的事务需求。

    另一个常见的选择是拥有一个完全独立的报表服务器,您可以远程调用它,它会接管与用户的交互。

    【讨论】:

      【解决方案2】:

      我在这里假设“生成代码”=“调用报告的 API”。

      您主要希望通过表示层执行此操作 - 表示层中的库仅联系报告层中的资源以将报告向下传输给用户。

      这样,您将避免在实际将数据发送给请求者(客户端)之前保留数据并继续跨层传递数据

      【讨论】:

        【解决方案3】:

        有几种方法可以解决这个问题。您可以从托管 bean 生成报告,请注意,您可能必须通过在浏览器中呈现报告之前调用 facesContext.responseComplete() 来中断 JSF 生命周期。

        另一个解决方案可能是拥有一个报告 servlet,您可以在需要生成报告时从 JSF 输出链接调用该 servlet。

        【讨论】:

          猜你喜欢
          • 2012-02-25
          • 2012-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-14
          • 2011-08-02
          • 2011-08-02
          • 1970-01-01
          相关资源
          最近更新 更多