java - JasperReports 服务器 : Getting "java.util.GregorianCalendar not configured" error when using java. util.Calendar 在 scriptlet

标签 java jasper-reports jasperserver

我有使用iReport的设计报告。在此报告中,我有一个自定义函数,它将年份和月份作为输入并返回该月的最大天数。

此方法在内部使用 java.util.Calendar API 来获取给定月份和年份的最大天数。

此报告在iReport中工作正常,但一旦我将此报告导入JasperReports Server,我就会收到此异常。

Error Message

java.lang.IllegalStateException: Processor of type com.jaspersoft.jasperserver.war.cascade.handlers.converters.DataConverter for class 

java.util.GregorianCalendar not configured

如何解决 JasperReports Server 中的此问题?如何在JasperReports Server中配置此类?

最佳答案

经过对上述问题的研究,我自己设法解决了。 我已经研究了 JasperServer 的数据转换器配置,但没有可用于 Calendar 类的数据转换器。

我发现的最好方法是创建自定义类,在其中编写要使用 java Calendar 类执行的整个逻辑并将其打包到 jar 中。现在直接使用该 jar API 来解决您的目的。

就我而言,我想计算报告期(我生成报告的时间段)。对我来说,这个结果的输入是我生成报告的月份和年份。下面是我写的代码片段

public static String calculateReportingPeriod(String year, String month,
            String dateFormat) {
        String reportingPeriod = new String();
        Calendar calendar = Calendar.getInstance();
        if (year == null || year.isEmpty()) {
            Integer lyear = Calendar.getInstance().get(Calendar.YEAR);
            year = lyear.toString();
        }
        if (month == null || month.isEmpty()) {
            Integer lmonth = Calendar.getInstance().get(Calendar.MONTH);
            /**
             * -1 because report in generate for previous month
             */
            lmonth = lmonth - 1;
            month = lmonth.toString();
        } else {
            Integer lmonth = Integer.parseInt(month);
            lmonth = lmonth - 1;
            month = lmonth.toString();
        }
        if (dateFormat == null || dateFormat.isEmpty()) {
            dateFormat = DATE_FORMAT;
        }
        /**
         * calculating max days in the given month and given year
         */
        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, Integer.parseInt(month));
        Integer maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

        calendar.set(Integer.parseInt(year), Integer.parseInt(month),
                START_DATE);
        Date reportingStartDt = calendar.getTime();
        reportingPeriod = new SimpleDateFormat(dateFormat)
                .format(reportingStartDt);
        reportingPeriod = reportingPeriod.concat(EMPTY_STRING);
        reportingPeriod = reportingPeriod.concat(DASH_SEPERATOR);
        reportingPeriod = reportingPeriod.concat(EMPTY_STRING);
        calendar.set(Calendar.DATE, maxDays);
        Date reportingEndDt = calendar.getTime();
        reportingPeriod = reportingPeriod.concat(new SimpleDateFormat(
                dateFormat).format(reportingEndDt));
        return reportingPeriod;
    }

然后我在 iReports 和 JasperServer 中使用这个 jar 来从输入中获取所需的结果。

关于java - JasperReports 服务器 : Getting "java.util.GregorianCalendar not configured" error when using java. util.Calendar 在 scriptlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11860109/

相关文章:

java - 查找坐标是否为顶点/边界坐标的有效方法?

java - 使用递归打印先倒数再向上的对称整数序列

java - 在 iReport 中使用 Java 类时出错

tomcat - 有没有办法从 jasperserver 备份生成的 pdf 报告文件?

jasper-reports - iReport 和 Jasper Server 中不同的数字格式

java - 在控制台中通过用户输入暂停线程时遇到困难

java - 使用 Internet Explorer 11 运行 64 位 Java

java - JasperReports html 和 pdf 输出

java - 如何将日期作为参数传递给 jasper 报告

java - 如何将报告部署到 Jasper Server