Как отправить атрибут из базы данных в dJ, чтобы сделать отчет - PullRequest
0 голосов
/ 27 февраля 2010

/ * * DynamicJasper: библиотека для динамического создания отчетов с указанием * столбцы, группы, стили и т. д. во время выполнения. Это также экономит много развития * время во многих случаях! (http://sourceforge.net/projects/dynamicjasper) * * Copyright (C) 2008 FDV Solutions (http://www.fdvsolutions.com)) * * Эта библиотека является свободным программным обеспечением; Вы можете распространять его и / или * изменить его в соответствии с условиями GNU Lesser General Public * * Лицензия, опубликованная Фондом свободного программного обеспечения; или * * версия 2.1 Лицензии или (по вашему выбору) любая более поздняя версия. * * Эта библиотека распространяется в надежде, что она будет полезна, * но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии * * УСТОЙЧИВОСТЬ или ПРИГОДНОСТЬ ДЛЯ ОСОБЫХ ЦЕЛЕЙ. Смотрите GNU * * Малая общедоступная лицензия для более подробной информации. * * Вы должны были получить копию GNU Lesser General Public * Лицензия вместе с этой библиотекой; если нет, напишите в свободное программное обеспечение * * Foundation, Inc., 51 Franklin Street, Пятый этаж, Бостон, Массачусетс, США 02110-1301 США * * * /

    package ar.com.fdvs.dj.test;

    import java.sql.*;

   import java.awt.Color;
   import java.util.Date;
   import java.util.Locale;

  import net.sf.jasperreports.view.*;
  import ar.com.fdvs.dj.domain.AutoText;
  import ar.com.fdvs.dj.domain.DynamicReport;
  import ar.com.fdvs.dj.domain.Style;
  import ar.com.fdvs.dj.domain.builders.FastReportBuilder;
  import ar.com.fdvs.dj.domain.builders.StyleBuilder;
  import ar.com.fdvs.dj.domain.constants.Font;
  import ar.com.fdvs.dj.core.DJConstants;
 // import ar.com.fdvs.dj.test.*;
  public class Main extends BaseDjReportTest {

public DynamicReport buildReport () выдает исключение { // Соединение C = новое соединение (); // C.Con (); CConnection C = новый CConnection (); C.Connection (); Заявление stmt; ResultSet rs = null; String SQL = "SELECT * FROM student"; stmt = C.Con (). createStatement (); rs = stmt.executeQuery (SQL); Строка res = "";

FastReportBuilder drb = new FastReportBuilder();

drb.setQuery(SQL, DJConstants.QUERY_LANGUAGE_SQL);
           while (rs.next()){
                 res= rs.getString("Name");
            **drb.addColumn("Name","Name", String.class.getName(),30);**
          //  drb.addc
           }
 //.addColumn("Branch", "branch", String.class.getName(),30)

  // .addColumn("Item", "item", String.class.getName(),50)
// .addColumn("Item Code", "id", Long.class.getName(),30,true)
// .addColumn("Quantity", "quantity", Long.class.getName(),60,true)
// .addColumn("Amount", "amount", Float.class.getName(),70,true)
drb.addGroups(2);
                    DynamicReport sa =drb.build();

 drb.setSubtitle("This report was generated at " + new Date())
 .setTemplateFile("templates/TemplateReportTest.jrxml")

                    .setUseFullPageWidth(true);


Style atStyle = new                    StyleBuilder(true).setFont(Font.COMIC_SANS_SMALL).setTextColor(Color.red).build();
Style atStyle2 = new StyleBuilder(true).setFont(new Font(9, Font._FONT_TIMES_NEW_ROMAN, false, true, false)).setTextColor(Color.BLUE).build();

/***
* Adding many autotexts in the same position (header/footer and aligment) makes them to be one on top of the other
 */
//First add in the FOOTER
drb.addAutoText(AutoText.AUTOTEXT_PAGE_X, AutoText.POSITION_HEADER, AutoText.ALIGNMENT_LEFT,200,40, atStyle);
drb.addAutoText("Autotext below Page counter", AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_LEFT);

//Note the styled text: <b>msimone</b>, valid tags are: <b>, <i> and <u>
drb.addAutoText("Created by <b>msimone</b>", AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_RIGHT,200);
drb.addAutoText(AutoText.AUTOTEXT_PAGE_X_SLASH_Y, AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_RIGHT,30,30,atStyle2);

drb.addAutoText(AutoText.AUTOTEXT_CREATED_ON, AutoText.POSITION_FOOTER, AutoText.ALIGNMENT_LEFT,AutoText.PATTERN_DATE_DATE_TIME);

//Now in HEADER
drb.addAutoText(AutoText.AUTOTEXT_PAGE_X_OF_Y, AutoText.POSITION_HEADER, AutoText.ALIGNMENT_LEFT,100,40);
drb.addAutoText("Autotext at top-left", AutoText.POSITION_HEADER, AutoText.ALIGNMENT_LEFT,200);

drb.addAutoText("Autotext at top-left (2)", AutoText.POSITION_HEADER, AutoText.ALIGNMENT_LEFT,200);
drb.addAutoText("Autotext at top-center", AutoText.POSITION_HEADER, AutoText.ALIGNMENT_CENTER,200,atStyle);

// DynamicReport dr = drb.build ();

//i18N, you can set a Locale, different tha n the default in the VM
drb.setReportLocale(new Locale("es","AR"));
drb.setReportLocale(new Locale("pt","BR"));
drb.setReportLocale(new Locale("fr","FR"));

return sa;

}

    public static void main(String[] args) throws Exception {
    **Main test = new Main();
   test.testReport();**
     JasperViewer.viewReport(test.jp);
            JasperDesignViewer.viewReportDesign(test.jr);
  //JasperDesignViewer.viewReportDesign(DynamicJasperHelper.generateJasperReport(test.dr, test.getLayoutManager(),new HashMap()));
}

}

При написании этого кода я получаю следующее исключение, и я действительно не могу выяснить причину

Исключение в потоке "main" net.sf.jasperreports.engine.JRException: Ошибка при получении значения поля из bean-компонента: varchar в net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty (JRAbstractBeanDataSource.java:123) в net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue (JRAbstractBeanDataSource.java:96) в net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue (JRBeanCollectionDataSource.java:100) в net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues ​​(JRFillDataset.java:818) на net.sf.jasperreports.engine.fill.JRFillDataset.next (JRFillDataset.java:782) на net.sf.jasperreports.engine.fill.JRBaseFiller.next (JRBaseFiller.java:1448) на net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport (JRVerticalFiller.java:108) на net.sf.jasperreports.engine.fill.JRBaseFiller.fill (JRBaseFiller.java:923) на net.sf.jasperreports.engine.fill.JRBaseFiller.fill (JRBaseFiller.java:845) на net.sf.jasperreports.engine.fill.JRFiller.fillReport (JRFiller.java:85) на net.sf.jasperreports.engine.JasperFillManager.fillReport (JasperFillManager.java:624) в ar.com.fdvs.dj.test.BaseDjReportTest.testReport (BaseDjReportTest.java:93) на ar.com.fdvs.dj.test.Main.main (Main.java:121) Вызывается: java.lang.NoSuchMethodException: неизвестное свойство 'varchar' для класса 'класс ar.com.fdvs.dj.test.domain.Product' в org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty (PropertyUtilsBean.java:1322) в org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty (PropertyUtilsBean.java:770) в org.apache.commons.beanutils.PropertyUtilsBean.getProperty (PropertyUtilsBean.java:846) на org.apache.commons.beanutils.PropertyUtils.getProperty (PropertyUtils.java:426) в net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty (JRAbstractBeanDataSource.java:111) ... еще 12 Результат Java: 1

1 Ответ

3 голосов
/ 02 марта 2011

Возможно, вы уже знаете об этом, но кажется, что где-то код пытается получить доступ к свойству varchar в объекте Product:

Причина: java.lang.NoSuchMethodException: неизвестное свойство 'varchar' для класса 'класса ar.com.fdvs.dj.test.domain.Product' в .....

Я не вижу, где это происходит в вашем примере. Может случиться так, что есть место, где ожидается имя, и вы вместо этого передаете тип. Или где-то в вашей конфигурации, вы изменили имя и тип, поэтому он ищет поле с именем "varchar". Имеет ли это смысл?

В целом, я считаю, что часть "Причина" в журнале ошибок является наиболее информативной.

...