Jasper reports 在Jasper报告中使用WHERE in子句中的自定义属性和$X{}

Jasper reports 在Jasper报告中使用WHERE in子句中的自定义属性和$X{},jasper-reports,Jasper Reports,我目前有一个名为countries的参数,类型为java.util.List,我在WHERE in子句中使用它,如下所示: AND $X{IN, rd.country_id, countries} 在我的应用程序中,我必须将我的列表转换为列表,这样我就可以使用它来生成In子句,否则Jasper会在(“阿根廷”、“巴西”)中创建类似的国家id,而不是使用id 我想知道是否可以使用List作为我的参数,并告诉$X{}使用字段id来创建IN子句,这样我就可以使用toString()方法来显示用户选择

我目前有一个名为
countries
的参数,类型为
java.util.List
,我在
WHERE in
子句中使用它,如下所示:

AND $X{IN, rd.country_id, countries}
在我的应用程序中,我必须将我的
列表
转换为
列表
,这样我就可以使用它来生成In子句,否则Jasper会在(“阿根廷”、“巴西”)中创建类似
的国家id,而不是使用id


我想知道是否可以使用
List
作为我的参数,并告诉
$X{}
使用字段id来创建IN子句,这样我就可以使用
toString()
方法来显示用户选择的国家,知道吗?谢谢

我不确定您是如何部署此报表的,但是您能否将输入控件的可见列设置为国家名称,而将值列设置为国家ID

如果无法编辑输入控件,那么如何修改查询以处理国家名称到ID的转换

SELECT *
FROM myTable
WHERE countryID IN (SELECT countryID
                    FROM countryTable
                    WHERE $X{IN, countryName, countries}
                    ) 

我不确定您是如何部署此报表的,但能否将输入控件的可见列设置为国家名称,而将值列设置为国家ID

如果无法编辑输入控件,那么如何修改查询以处理国家名称到ID的转换

SELECT *
FROM myTable
WHERE countryID IN (SELECT countryID
                    FROM countryTable
                    WHERE $X{IN, countryName, countries}
                    ) 

我现在能想到的一种方法是使用一个java类,它将获取countryname类型的列表,并返回countryId类型的列表。 您必须创建另一个List类型的参数。此参数将调用java方法。然后您可以在查询中使用此参数

我假设@Lisa提供的答案在本例中不起作用

编辑: 将java类放在项目类路径中

“”标记不可见

我现在能想到的一个方法是使用一个java类,它将获取您的countryname类型列表和countryId类型返回列表。 您必须创建另一个List类型的参数。此参数将调用java方法。然后您可以在查询中使用此参数

我假设@Lisa提供的答案在本例中不起作用

编辑: 将java类放在项目类路径中

“”标记不可见

谢谢你的回答@Lisa,但这是一份摘要报告,所以我只想显示报告标题中选择了哪个国家感谢你的回答@Lisa,但这是一份摘要报告,所以我只想显示报告标题中选择了哪个国家@willome,我会在where子句中得到'MySQLSyntaxErrorException:Unknown column'$X.id',nope@willome,我会在where子句中得到'MySQLSyntaxErrorException:Unknown column'$X.id',这正是我现在在控制器逻辑中所做的,但我想在报告中应用它。。那么,我应该在哪里声明该类,以便在编写报表查询时使用它?@cjava一个很好的例子,这正是我现在在控制器逻辑中所做的,但我想在报表中应用它。。那么,我应该在哪里声明该类,以便在编写报表查询时使用它呢?@cjava举个例子就好了