2011-08-10 6 views
1

私は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:... 

を評価することは、誰もが間違って何が起こっているのかを教えてもらえますしながら、私はエラーを取得しています?

+0

これに関するフィードバックはありますか? – tintin

答えて

1

短い答えはいいえ、$ X構文はqueryString内でのみ動作します。

しかし、$ Xが出たら、すべてのJasperReportsはクエリを実行する前にそれを文字列に翻訳します。したがって$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!構文を使用して、クエリに文字列を配置することができます。すなわち:$P構文とは異なり

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

$P!はずっと$ Xが何をしているかのように、クエリを実行する前に、単純な文字列置換を行います。

+0

それは私が探していた解決!ありがとう:-) – tintin

関連する問題