因此,我试图在jrxml文件中以二维方式插入参数的键值:
。properties:
test.1.keyvalue =测试test.2.keyvalue = test2
并且在jxml文件中:$ P {str(“ test.1.keyvalue”)}
但是这不起作用,我也尝试在.properties文件中创建一个密钥:
test.3.keyvalue = $ P {test3}
但是使用str(“ test.3.keyvalue”)进行调用会将其转换为字符串。有没有办法做完全相同的事情?
您不能使用任何表达式作为参数名称。即使此表达式也无法编译:[$P{"paramName"}
-编译器将引发异常。
要解决您的任务,您可以使用内置的[[$ P {REPORT_PARAMETERS_MAP}参数。
工作示例text.message = key1
文件名将为
custom_messages.properties
。报告模板此基本
jrxml
在Jaspersoft Studio(JSS)处使用“一个空记录”数据源。<?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="dynamicParameterName" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" resourceBundle="custom_messages">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="a" class="java.lang.String">
<defaultValueExpression><![CDATA["b"]]></defaultValueExpression>
</parameter>
<parameter name="b" class="java.lang.String">
<defaultValueExpression><![CDATA["valueForB"]]></defaultValueExpression>
</parameter>
<parameter name="key1" class="java.lang.String">
<defaultValueExpression><![CDATA["valueForKey1"]]></defaultValueExpression>
</parameter>
<title>
<band height="241" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="360" height="30"/>
<textElement textAlignment="Right"/>
<text><![CDATA[$R{text.message}]]></text>
</staticText>
<textField>
<reportElement x="380" y="0" width="160" height="30"/>
<textFieldExpression><![CDATA[$R{text.message}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="30" width="360" height="30"/>
<textElement textAlignment="Right"/>
<text><![CDATA[$P{a}]]></text>
</staticText>
<textField>
<reportElement x="380" y="30" width="160" height="30"/>
<textFieldExpression><![CDATA[$P{a}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="60" width="360" height="30"/>
<textElement textAlignment="Right"/>
<text><![CDATA[$P{b}]]></text>
</staticText>
<textField>
<reportElement x="380" y="60" width="160" height="30"/>
<textFieldExpression><![CDATA[$P{b}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="90" width="360" height="30"/>
<textElement textAlignment="Right"/>
<text><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($P{a})]]></text>
</staticText>
<textField>
<reportElement x="380" y="90" width="160" height="30"/>
<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($P{a})]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="120" width="360" height="30"/>
<textElement textAlignment="Right"/>
<text><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($$R{text.message})]]></text>
</staticText>
<textField>
<reportElement x="380" y="120" width="160" height="30"/>
<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($R{text.message})]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
<< [存储我们要显示的参数的名称。下面的表达式可以完成所有工作:a
<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($P{a})]]></textFieldExpression>
等效于此表达式:<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get("b")]]></textFieldExpression>
或此:
<textFieldExpression><![CDATA[$P{b}]]></textFieldExpression>
我们可以与$R{}
表达式结合使用的相同技巧:
<textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.get($R{text.message})]]></textFieldExpression>
此表达式为我们提供了参数名称的参数值,该参数的名称通过
custom_messages.properties文件中的
text.message键存储。
输出在JSS上生成的输出将是:更多信息
引擎内置参数:Default Parameters