Jasper - ireport - java web应用程序 - 数据源静态方法

时间:2014-02-26 14:37:10

标签: java jsf java-ee jasper-reports ireport

我面临以下疑问,涉及从JEE网络应用程序传递信息到ireport以填充jasper中的表格。

在Ireport中,当我从java bean创建数据源时,它向我询问一个静态方法,它将数据发送给jasper并使用它来完成表。但是,每次我尝试在state / statless / managed bean中实现静态函数并调用具有要在jasper中显示的Collection的类时它说“无法从静态上下文引用非静态变量XX”。

我知道它正在发生,因为我需要在静态方法中创建一个EJB实例并填充要返回的集合。但我不应该创建EJB实例,即使我可以,新实例也不会具有与当前EJB上下文相同的信息。

我还没有找到解决方法来解决这个问题。 你有任何推荐吗?

我正在使用JSF 2,java EJB,JPA和glassfish 3.1

谢谢,

2 个答案:

答案 0 :(得分:2)

Jasper文档的理解并不那么简单,大多数时候它可能会让您感到困惑。 我所做的是在我通过bean注入发送到报告的类中创建一个额外的JRBeanCollectionDataSource属性。 这个新属性让我发送一个Collection(一个列表),在jasper报告中,我在表中声明了一个数据源,该值是我之前提到的bean的属性。

    <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
                <datasetRun subDataset="DosCoulmnas" uuid="1364a3ee-d385-49a0-9d12-e5bdd95832ac">
                    <datasetParameter name="encabezados">
                        <datasetParameterExpression><![CDATA[$F{dtoPDFAreaYGrado1.dtoEstablecimiento}.getEncabezados()]]></datasetParameterExpression>
                    </datasetParameter>
                    <dataSourceExpression><![CDATA[$F{dtoPDFAreaYGrado1.dtoEstablecimiento}.getDatos()]]></dataSourceExpression>
                </datasetRun>

答案 1 :(得分:1)

尝试使用bean注入,而不是静态方法,因此您可以引用bean的当前状态,并使用它的方法。