java - DynamicJasper 将列添加到具有不支持的数据类型的 fastreportbuilder

标签 java reporting jasper-reports dynamic-jasper

我有一个正在为其构建报告的对象列表。该对象的属性之一是 JodaTime LocalDate 对象。我希望将此日期包含在我的报告中,因此我会执行以下操作:

.addColumn("Shipout", "shipout", LocalDate.class.getName(),50)

这会导致以下错误:

net.sf.jasperreports.engine.design.JRValidationException: Report design not valid : 
    1. Class "org.joda.time.LocalDate" not supported for text field expression.

那很好,但必须有某种方法可以添加 LocalDate 列类型 - 我在文档中找不到类似的内容。

我能找到的最接近的是 CustomExpression,但所有示例都涉及执行诸如复合列之类的操作。

正确的做法是什么?

谢谢!

最佳答案

JasperReports 版本 3.7.1(受 DynamicJasper 版本 3.1.9 支持)仅支持文本字段表达式的此类:

  • java.lang.Boolean
  • java.lang.Byte
  • java.util.Date
  • java.sql.Timestamp
  • java.sql.Time
  • java.lang.Double
  • java.lang.Float
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Short
  • java.math.BigDecimal
  • java.lang.Number
  • java.lang.String

您可以通过查看此方法的源代码来确定这一事实 net.sf.jasperreports.engine.design.JRVerifier类:

private static synchronized String[] getTextFieldClassNames()
{
    if (textFieldClassNames == null)
    {
        textFieldClassNames = new String[]
        {
            java.lang.Boolean.class.getName(),
            java.lang.Byte.class.getName(),
            java.util.Date.class.getName(),
            java.sql.Timestamp.class.getName(),
            java.sql.Time.class.getName(),
            java.lang.Double.class.getName(),
            java.lang.Float.class.getName(),
            java.lang.Integer.class.getName(),
            java.lang.Long.class.getName(),
            java.lang.Short.class.getName(),
            java.math.BigDecimal.class.getName(),
            java.lang.Number.class.getName(),
            java.lang.String.class.getName()
        };

        Arrays.sort(textFieldClassNames);
    }

    return textFieldClassNames;
}

private void verifyTextField(JRTextField textField)
{
    verifyReportElement(textField);
    verifyFont(textField);
    verifyAnchor(textField);
    verifyHyperlink(textField);

    if (textField != null)
    {
        JRExpression expression = textField.getExpression();

        if (expression != null)
        {
            try
            {
                String className = expression.getValueClassName();
                if (className == null)
                {
                    addBrokenRule("Class not set for text field expression.", expression);
                }
                else if (Arrays.binarySearch(getTextFieldClassNames(), className) < 0)
                {
                    addBrokenRule("Class \"" + className + "\" not supported for text field expression.", expression);
                }
            }
            catch (JRRuntimeException e)
            {
                addBrokenRule(e, expression);
            }
        }
    }
}

如您所见,verifyTextField 方法会在您的案例中生成此消息。

完整的堆栈跟踪:

  1. Class "org.joda.time.LocalDate" not supported for text field expression. net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
  2. Class "org.joda.time.LocalDate" not supported for text field expression. at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:258) at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:140) at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215) at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:542) at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:518) at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJRXML(DynamicJasperHelper.java:403)

我认为你应该尝试使用 scriptlet。这是sample .

关于java - DynamicJasper 将列添加到具有不支持的数据类型的 fastreportbuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8030237/

相关文章:

java - 有什么好的 API 可以为 Java Web 应用程序生成报告?

jasper-reports - iReport + UTF-8

java - 自定义 Java 序列化

java - 无法从嵌套json改造android studio中获取值(value)

java - 四舍五入到最接近的整数——我是在作弊还是这已经足够了?

reporting - 量化数据仓库投资返回率的公认方法是什么?

reporting - Snyk 是否提供开源许可证合规性管理?如果是,是否可以根据所使用的许可证生成报告?

java - 我可以使用 DynamicJasper 在 xls 报告中呈现表格和/或图表 'side by side' 吗?

jasper-reports - 如何将JasperReport导出为HTML?

java - Spring Boot 使用模板引擎的麻烦