【问题标题】:Can $X{} function used outside queryString?$X{} 函数可以在 queryString 之外使用吗?
【发布时间】:2017-01-31 20:12:56
【问题描述】:

我正在尝试在 jrxml 中像这样在 queryString 之外使用 $X{}

<parameter name="param_value" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[(" where $X{IN, country,country_param}")]]> </defaultValueExpression>
</parameter>

<queryString>
    <![CDATA[select user_id from user_profile $P{param_value}]]>
</queryString>

但我在评估 param_value 时遇到了错误

Caused by: groovy.lang.MissingPropertyException: No such property: X for class:...

谁能告诉我怎么回事?

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    简短的回答是否定的,$X 语法仅适用于 queryString。

    但是,JasperReports 在遇到 $X 时所做的就是在运行查询之前将其转换为字符串。所以$X{IN, country,country_param}变成country IN (country1, country2, ...)

    要解决您的问题,您可以自己在 Java 中生成字符串并将其作为变量传递给报告。像这样的:

    if(countryList == null){
        countryList = defaultCountryList;
    }
    
    StringBuilder whereParam = new StringBuilder();
    whereParam.append(country);
    whereParam.append("IN (");
    for(String s : countryList){
        whereParam.append("\""+s+"\"");
    }
    whereParam.append(")");
    
    reportParameters.setParameter("where_param", whereParam.toString());
    

    然后通过使用$P! 语法,您可以将字符串放入查询中。即:

    <queryString>
    <![CDATA[SELECT user_id FROM user_profile WHERE $P!{where_param}]]>
    </queryString>
    

    $P 语法不同,$P! 在运行查询之前执行简单的字符串替换,就像 $X 所做的那样。

    【讨论】:

      猜你喜欢
      • 2015-07-18
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多