Jasper reports 如何在jaspersoft中使用条件在文本字段中添加多个表达式?
我有一个文档需要是动态的,所以我添加了一些文本字段,我会将一个数字作为参数传递给它应该是什么文本,我正在为我的脚注使用REPORT\u parameter\u MAP,在传递文本字段的文本后,我需要放置脚注。 问题是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
$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>