10

JSF アプリケーションで JasperReport と ireport を使用して、その場でレポートを生成しています。これは私が達成しようとしているものです:-

  1. 私の構造 (HashMap/ArrayList として読み取られる) には、レポートに同じデータが表示されるように、レポートに渡す必要があるデータが含まれています。

  2. レポートには、DB から値を取得してレポートに入力するデータソース接続が既に含まれています。

  3. サブレポートを作成して、コードから渡す必要があるデータに対してサブレポートを使用し、このサブレポートをメイン レポート内に埋め込むことができるようにします。

私の問題は次のとおりです。- 1. コレクション (HashMap/ArrayList として読み取られる) をサブレポートに渡して、コードからのデータを入力することができません。

コレクション全体をサブレポートに渡してデータを入力する方法が必要であると確信しており、JavaBean データソース接続の作成も試みましたが、接続の作成中に Missing classpath entry と表示されます。

構造内で値が常に変化しているため、それぞれのクラスをjar内にバンドルしてjarをクラスパスに配置することはできません....

データを入力できるように、Java Bean データソースをレポートに作成/渡す方法を教えてください...

親切にガイド...

更新部分:-

パラメータをレポートに渡し、レポートを生成するための Java コード:-

public class TestDataSource
{
    public static void main(String[] args)
    {

        try {
            JasperDesign jasperDesign = JRXmlLoader.load("D:\\jasperReports\\subReportDataSource.jrxml");
            JasperReport jasperReport =(JasperReport)JasperCompileManager.compileReport(jasperDesign);
            Map<String,Object> parameters = new HashMap<String,Object>();
            parameters.put ("Title",generateCollection());

            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(generateCollection()));

            JasperViewer.viewReport(jasperPrint);
            }catch(Exception e)
            {
                e.printStackTrace();
            }
    }

    public static ArrayList<PersonBean> generateCollection()
    {
        ArrayList<PersonBean> arrlist=new ArrayList<PersonBean>();
        arrlist.add(new PersonBean("A", 20));
        arrlist.add(new PersonBean("B",30));
        arrlist.add(new PersonBean("C",40));
        arrlist.add(new PersonBean("D",50));
        arrlist.add(new PersonBean("E",40));
        arrlist.add(new PersonBean("F",60));

        return arrlist;
    }

}

ここで、新しいレポート (レポート) を作成しました。その中にサブレポート (サブレポート) を配置しました。サブレポートのデータソースを新しい net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{題名})

接続タイプ: - データソース接続タイプを使用します。

サブレポート内に、名前と年齢として 2 つの静的フィールドを配置しました。レポート/サブレポートに、渡されるハッシュマップの値として存在する値を出力するように指示するにはどうすればよいですか。

4

1 に答える 1

10

すでに DataSource がある場合は、レポートに入力するときに、List/Map を param Map に渡すことができます。

Map<String, Object> param = new HashMap<String, Object>();
param.put("SUB_DATA_SOURCE", yourList);

JasperFillManager.fillReport(jasperReport, param,
                new JRBeanCollectionDataSource(yourMainListHere));

これを行うには、パラメーターマップで設定したのと同じ名前でメインレポート内にパラメーターを作成し、これにタイプクラス (私の場合はリスト) を与える必要があります。

サブレポート要素を作成し、接続タイプを「データソース式を使用」として設定し、「データソース式」内で次のように設定する必要があります。

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{SUB_DATA_SOURCE})
于 2012-07-17T17:27:38.960 に答える