如何通过属性文件中定义的名称获取参数值?

问题描述 投票:0回答:1

因此,我试图在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”)进行调用会将其转换为字符串。有没有办法做完全相同的事情?

parameters jasper-reports properties-file
1个回答
0
投票

您不能使用任何表达式作为参数名称。即使此表达式也无法编译:[$P{"paramName"}-编译器将引发异常。

要解决您的任务,您可以使用内置的[[$ P {REPORT_PARAMETERS_MAP}参数。

工作示例

属性文件

例如,此基本属性文件就足够了:

text.message = key1

文件名将为

custom_messages.properties

报告模板

我定义了3个参数来演示如何通过“动态”名称获取参数。

此基本

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上生成的输出将是:

Output at JSS preview

更多信息


© www.soinside.com 2019 - 2024. All rights reserved.