当前位置: 首页 > 知识库问答 >
问题:

如何获取复杂JavaBean的值

郎吉星
2023-03-14

我有一个.jrxml文件,我想将代码中的一些参数传递给它。我有一个<code>Orde</code>r类,它具有<code>双倍价格</code<、<code>int quantity</code〕和<code>Product Product</code’等字段。情况很简单,当我需要传递价格或数量时,我只需要这样做:

<textFieldExpression class = "java.lang.Integer">
   <![CDATA[$F{quantity}]]>
</textFieldExpression>

当我尝试传递 product.getName() 时出现问题。我尝试了类似的东西:

<textFieldExpression class = "java.lang.String">
   <![CDATA[$F{product}.getName()]]>
</textFieldExpression>

还有许多其他的,但我一直得到错误:net.sf.jasperreports.engine.design.JRValidation异常:报告设计无效:1。找不到字段:产品

你知道如何解决这个问题吗?

共有1个答案

易元青
2023-03-14

例如,您有一对JavaBean(POJO):

public class Order {

    private double price;
    private int quantity;
    private Product product;
    // public getters 
}

public class Product {

    private String name;
    // public getters 
}

并且您以如下方式声明报表的数据源:(是的,我喜欢番石榴)

JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(Lists.newArrayList(ImmutableList.<Order>builder()
        .add(new Order(1000.2, 10, new Product("Phone")))
        .add(new Order(10200.0, 2, new Product("Tv")))
        .build()));

如果使用此字段声明:

<field name="order" class="java.lang.Object">
    <fieldDescription><![CDATA[_THIS]]></fieldDescription>
</field>
<field name="price" class="java.lang.Double"/>
<field name="quantity" class="java.lang.Integer"/>
<field name="productName" class="java.lang.String">
    <fieldDescription><![CDATA[product.name]]></fieldDescription>
</field>

您可以使用这样的表达式:

<textField>
    <reportElement x="0" y="0" width="100" height="30"/>
    <textFieldExpression><![CDATA[$F{price}]]></textFieldExpression>
</textField>
<textField>
    <reportElement x="100" y="0" width="100" height="30"/>
    <textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression>
</textField>
<textField>
    <reportElement x="200" y="0" width="100" height="30"/>
    <textFieldExpression><![CDATA[$F{productName}]]></textFieldExpression>
</textField>

注意:

  • 别忘了getter应该是公开的
  • 更多信息:JavaBean数据源
  • 可以在以下帖子中找到_THIS与示例一起使用的很好解释:
    1. 如何在jasper报告中访问数据源的根元素
    2. 将原始类型对象列表作为子报告的数据源传递
    3. 如何在iReport中打印包含在另一个列表中的字符串列表?
 类似资料:
  • 问题内容: 我有一个 .jrxml 文件,我想将一些参数从代码传递给它。我有一个具有像场R舱,和。情况很简单,当我需要传递价格或数量时,我只是这样做: 我尝试通过时出现问题。我尝试了类似的东西: 和许多其他问题,但我不断出错: 您有解决该问题的想法吗? 问题答案: 例如,您有一对JavaBean(POJO): 并且您以这种方式声明报告的数据源:(是的,我喜欢 Guava ) 如果使用此字段声明:

  • 当我尝试发送请求时“http://localhost:1234/api/case/create?signature=123456“从Postman(谷歌扩展)使用body请求中的“表单数据”,我得到错误: “消息”:“此资源不支持请求实体的媒体类型‘多部分/表单数据’。”,“ExceptionMessage”:“没有MediaTypeFormatter可用于从媒体类型为“multipart/for

  • 问题内容: 我们习惯说运算是O(1)。但是,这取决于哈希实现。默认对象哈希实际上是JVM堆中的内部地址。我们确定声称 O(1)是否足够好? 可用内存是另一个问题。据我从javadocs理解,应该是0.75。如果我们在JVM中没有足够的内存并且超出限制怎么办? 因此,似乎无法保证O(1)。是有意义还是我想念什么? 问题答案: 这取决于很多事情。这通常是 O(1),一个体面的哈希它本身是固定的时间…但

  • 我想把一些JSON解析成一个SQL的INSERT,但是,由于不同级别的数据片段不同,很难得到所有的数据。 以下是JSON文件: 到目前为止,这就是我所用的Python,它可以工作: 结果是: 这有点对,但我需要插入看起来像: 我看到了一些例子:例1 但我一直没能让它为我工作。 @斯科尔05 我想你的意思是:但它导致了一个错误:AttributeError:'dict'对象没有属性'iteritem

  • 现在,可重用在JavaBean中意味着什么。我们不能重用servlet吗? 如果有人能用很少的例子来解释这一点,我将不胜感激。

  • 我有以下一组复选框: 使用javascript,我如何访问每个项目的文本。例如,对于id=“mensajes\u receptores\u list\u 5”的元素,我想得到文本“Carlos(Admin)”