Jasper reports 如何在jaspersoft中使用条件在文本字段中添加多个表达式?

Jasper reports 如何在jaspersoft中使用条件在文本字段中添加多个表达式?,jasper-reports,ternary-operator,Jasper Reports,Ternary Operator,我有一个文档需要是动态的,所以我添加了一些文本字段,我会将一个数字作为参数传递给它应该是什么文本,我正在为我的脚注使用REPORT\u parameter\u MAP,在传递文本字段的文本后,我需要放置脚注。 问题是Jaspersoft不允许我在一个条件中添加多个表达式 我的文本字段正在执行以下操作: $P(param1) == 0 ? null : $P(param1) == 1 ? ( "text for number one"; $P{REPORT_PARAMETERS

我有一个文档需要是动态的,所以我添加了一些文本字段,我会将一个数字作为参数传递给它应该是什么文本,我正在为我的脚注使用REPORT\u parameter\u MAP,在传递文本字段的文本后,我需要放置脚注。 问题是Jaspersoft不允许我在一个条件中添加多个表达式

我的文本字段正在执行以下操作:

$P(param1) == 0 ? null : $P(param1) == 1 ? (
     "text for number one";
     $P{REPORT_PARAMETERS_MAP}.put("id_1", $V(footnote))
) : "text for other numbers"
出于某种原因,jaspersoft不理解我在尝试做什么,它也不接受;,如果我做错了什么,请向我解释。

你不能使用;在textField表达式中,所有路径都应返回类似于excel公式的结果。这种类型的表达式几乎不可能调用void方法

但是,如果某个方法有返回值,则可以对其进行破解 在您的例子中,$p{REPORT\u PARAMETERS\u MAP}.putid\u 1,$Vfootnote您正在调用api上的put方法。正如你所看到的,它回来了

与键关联的上一个值,如果键没有映射,则为null

因为它返回一个值,所以您可以将这个调用嵌套在三元表达式中,而不只是返回第一个值的文本

正如您所见,此表达式的计算结果始终为true,它将始终返回数字1的文本,但它也将值放入映射中

简单jrxml示例演示技术


再次感谢你,你是最棒的,彼特!
 ($P{REPORT_PARAMETERS_MAP}.put("id_1", $V(footnote))==null || true)?"text for number one":""
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TestParams" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f85bc6aa-5060-4485-bd99-bd5de1734ef1">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="Param1" class="java.lang.Integer">
        <defaultValueExpression><![CDATA[1]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <title>
        <band height="79" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="545" height="30" uuid="fc021fc5-85aa-4ea3-8372-3231fe4aeb84"/>
                <textFieldExpression><![CDATA[($P{Param1}!=null && $P{Param1}==1)?($P{REPORT_PARAMETERS_MAP}.put("Hi","Hello world")!=null || true)?"We put Hi!":"":"Param1 was not 1"]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <summary>
        <band height="42" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="544" height="30" uuid="56d3ab2d-19c9-4314-84b3-e6103e54446f"/>
                <textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get("Hi")]]></textFieldExpression>
            </textField>
        </band>
    </summary>
</jasperReport>