JSF и пример с яшмой - PullRequest
0 голосов
/ 02 мая 2010

Я новичок в JSF, хочу интегрировать JSF с отчетом Jasper. Я создаю пользовательский отчет со стороны сервера, который должен отображаться в пользовательском интерфейсе с использованием компонентов JSF. Как это сделать? Не могли бы вы предоставить JSF и Jasper Report Simple Program и необходимые библиотеки.

Ответы [ 3 ]

1 голос
/ 02 мая 2010

Предполагая, что вы говорите о HTML-отчетах JasperReports, лучше всего на этом этапе забыть о бите JSF, поскольку это не имеет значения для JasperReports. В свою очередь, JSF также не может делать ничего разумного с «сторонним» HTML. Просто добавьте элемент HTML <iframe> на страницу JSF, чья src указывает на URL-адрес экземпляра HttpServlet, который возвращает желаемый HTML-отчет JasperReports на основе параметров запроса или pathinfo, которые вы, в свою очередь, можете динамически передавать, используя EL , E.g.:

<iframe width="600" height="400" src="reportservlet?id=${bean.someid}"></iframe>

HttpServlet, стоящий за url-pattern из /reportservlet, просто вызывает JasperReports в соответствии с его документацией / учебными пособиями, получает InputStream его и записывает в OutputStream HttpServletResponse вместе с правильный набор заголовков ответов, по крайней мере, Content-Type важен.

0 голосов
/ 31 марта 2016

Скачать банку можно по ссылке ниже

http://www.java2s.com/Code/Jar/d/Downloaddynamicreportscore310jar.htm

Или, если вы используете maven, просто добавьте приведенную ниже зависимость в ваш файл pom.xml

<dependency>
    <groupId>net.sourceforge.dynamicreports</groupId>
    <artifactId>dynamicreports-core</artifactId>
    <version>3.1.3</version>
</dependency>

Страница XHTML

<h:commandLink id="summary_jasper" actionListener="#{workReportBean.prepareJasperReport()}">
      <p:graphicImage name="/images/jasper.png"  title="Jasper"/>
</h:commandLink>

Управляемый Боб // Просто укажите DB_NAME, CREDENTIALS и TABLE_NAME, для вас будет создан отчет JASPER

public void prepareJasperReport(){
    Map<String, String> columnNameNTypeMap = new HashMap<String, String>();
    Connection connection = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/DB_NAME", "USER", "PASSWORD");
        ResultSet rsColumns = null;
        DatabaseMetaData meta = connection.getMetaData();
        rsColumns = meta.getColumns(null, null, "TABLE_NAME", null);
        while (rsColumns.next()) {
            columnNameNTypeMap.put(rsColumns.getString("COLUMN_NAME"), rsColumns.getString("TYPE_NAME"));
        }} catch (SQLException e) {
        e.printStackTrace();
        return;
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
        return;
    }

    // a new report
    JasperReportBuilder report = DynamicReports.report();
    // populating new report with TABLE object
    report.setDataSource("select * from TABLE_NAME;", connection);
    // creating COLUMNS // add extra datatypes if your table have ex. long, float etc
    for (Map.Entry<String, String> entry : columnNameNTypeMap.entrySet()){
        if(entry.getValue().equalsIgnoreCase("int")){
            report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.integerType()));
        }else if(entry.getValue().equalsIgnoreCase("varchar")){
            report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.stringType()));
        }else if(entry.getValue().equalsIgnoreCase("bit")){
            report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.booleanType()));
        }else if(entry.getValue().equalsIgnoreCase("datetime") || entry.getValue().equalsIgnoreCase("date")){
            report.columns(Columns.column(entry.getKey(), entry.getKey(), DataTypes.dateType()));
        }

    }

    report.title(Components.text("Summary Report").setHeight(40)
            .setStyle(DynamicReports.stl.style()
            .setBold(true).setFontSize(16).setForegroundColor(Color.BLUE)
            .setAlignment(HorizontalAlignment.CENTER, VerticalAlignment.MIDDLE)));

    report.setColumnTitleStyle(DynamicReports.stl.style().setBold(true));
    report.setColumnStyle(DynamicReports.stl.style().setHorizontalAlignment(HorizontalAlignment.LEFT));
    report.setHighlightDetailEvenRows(true);
    report.pageFooter(Components.pageXofY());

    try {
        // show the report
        report.show(false);
        // export the report to a pdf file
        //report.toPdf(new FileOutputStream("d://report.pdf"));
    } catch (DRException e) {
        e.printStackTrace();
    } /*catch (FileNotFoundException e) {
        e.printStackTrace();
    }*/

}
0 голосов
/ 04 мая 2010

Предложение BalusC кажется хорошим, если вам нужны отчеты в формате HTML. Вот мой ответ на случай, если вы захотите использовать любой другой формат (скажем, PDF)

Сделайте Ajax-запрос к сервлету, чтобы «подготовить» отчет и сохранить его где-нибудь, а затем вернуть идентификатор вновь созданного отчета.

Ответ возвращается с успехом или неудачей. В случае успеха вы открываете новое окно с гипотетическим URL-адресом и передаете в него файл PDF (используя имеющийся у вас идентификатор)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...