java - 在iReport表达式中调用Java API

标签 java jasper-reports ireport

我正在尝试将对 Java 库的调用附加到 iReport 表达式中。

我用一个非常简单的库尝试了这个,返回一个 hello world 字符串。

package utils;
public class Hello {
    public static String hello()
    {
        return "Hello";
    }
}

iReport中,我想使用这个API。我将上面的库编译成jar文件。在工具 -> 选项 -> 类路径中添加了位置。

然后尝试以下操作:

  • 编辑文本字段中的表达式new utils.Hello().hello()
  • 创建一个新字段并将其类型设置为 utils.Hello。然后在表达式中使用 field.hello()

在这两种情况下,它都会提示无法解析 hello。然而它在类路径中。我还尝试右键单击报告根并将 utils.Hello/utils 添加到 Java 导入指令中。两者似乎都没有提高类效率。

非常感谢任何建议。

最佳答案

你的正确表达可能是这样的:

<textFieldExpression><![CDATA[utils.Hello.hello()]]></textFieldExpression>

工作示例:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ..>
    <queryString>
        <![CDATA[SELECT DISTINCT city FROM address ORDER BY city]]>
    </queryString>
    <field name="CITY" class="java.lang.String"/>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[utils.Hello.hello()]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

您还可以向报告添加导入指令。在这种情况下,表达式将是:

<textFieldExpression><![CDATA[Hello.hello()]]></textFieldExpression>

工作示例:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ... whenNoDataType="AllSectionsNoDetail">
    <import value="utils.Hello"/>
    <title>
        <band height="41">
            <textField>
                <reportElement x="188" y="11" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[Hello.hello()]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

注意:对于这两个示例,jar 文件(带有 utils.Hello 类)必须位于类路径中.

Setting classpath in iReport

有关使用 srciptlet 的更多信息,您可以找到 here .

关于java - 在iReport表达式中调用Java API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13023358/

相关文章:

java - 如何使用箭头键(向上/向下)浏览 java 菜单项?

java - JRBeanCollectionDataSource - 类 'notas' 上的未知属性 'class model.Notas'

jasper-reports - 碧 Jade 报告 : How to mask or filter the labels at the chart's axis

jasper-reports - 如何在单独的Excel工作表中显示每个子报表

java - 取 "new java.util.Date()"并在 1 个月前制作

java - 如何判断子串OR匹配?

java - 用于修剪美国 5+4 邮政编码但保持加拿大邮政编码不变的子字符串

java - 如何使用 mongodb 查询生成器编写 java 代码以使用 "_id"检索文档?

java - 如何在 JasperSoft Studio 中使用外部 JAR 文件

java - Spring Async 方法隐藏异常