2012-04-13 7 views
0

私のパラメータから名前kemの入力リストを入れました。 kem 1,kem 2,kem 3です。私は$x{in,pd_id,Kem}をパラメータとして作成しましたが、結果は3ケムからkem 1と表示されます。私が望むのは、kemのリスト名を入れると、データはすべてのデータを表示します。つまり、kem 1,kem 2,kem 3です。 これは私のコードです:複数のパラメータをリストするときにテキストフィールドを設定する方法

<?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="testspace" language="javascript" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <parameter name="kem" class="java.util.Collection"> 
     <defaultValueExpression><![CDATA[]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[select 
PD_ID, 
PD_NAME 
from wf_proc_def where $X{IN,PD_ID,kem}]]> 
    </queryString> 
    <field name="PD_ID" class="java.math.BigDecimal"/> 
    <field name="PD_NAME" class="java.lang.String"/> 
    <background> 
     <band splitType="Stretch"/> 
    </background> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField isBlankWhenNull="true"> 
       <reportElement x="118" y="24" width="334" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[ ("1".equals($P{kem})) ? "kem1" 
:("2".equals($P{kem})) ? "kem2" 
:("3".equals($P{kem})) ? "kem3" 
:("4".equals($P{kem})) ? "kem4" 
:("5".equals($P{kem})) ? "kem5" 
:null]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 
+0

ます(パラメータ、クエリと 'textField'で)jrxmlファイルのスニペットを投稿することができますか? –

+0

私は非常に遅く返事を申し訳ありません、私は上記の私のコードを入れている。あなたが私を助けることを願っています。 –

答えて

2

私は、値のリストが含まれている必要があり、あなたのパラメータkemと間違って何かを考えます。このパラメータを初期化する必要があります。

この働いているサンプルは、(それがiReportはのサンプル・データベースで動作します):

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport ..> 
    <parameter name="cities" class="java.util.List"> 
     <defaultValueExpression><![CDATA[Arrays.asList(new String[] {"Dallas", "Lyon", "Paris"})]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[SELECT ID, CITY FROM ADDRESS WHERE $X{IN,CITY,cities}]]> 
    </queryString> 
    <field name="ID" class="java.lang.Integer"/> 
    <field name="CITY" class="java.lang.String"/> 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{cities}]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
    <detail> 
     <band height="20" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="100" y="0" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

iReportプレビュー機能で生成された結果: Result generated via iReport preview

UPDATE

をキーで値を解決する方法

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport ..> 
    <import value="com.google.common.collect.*"/> 
    <import value="com.google.common.base.*"/> 
    <parameter name="cities" class="java.util.List"> 
     <defaultValueExpression><![CDATA[Arrays.asList(new String[] {"1", "2", "3"})]]></defaultValueExpression> 
    </parameter> 
    <parameter name="citiesMap" class="java.util.Map"> 
     <defaultValueExpression><![CDATA[new ImmutableMap.Builder<String, String>().put("1", "Dallas").put("2", "Lyon").put("3", "Paris").build()]]></defaultValueExpression> 
    </parameter> 
    ... 
    <title> 
     <band height="79" splitType="Stretch"> 
      <textField> 
       <reportElement x="0" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$P{cities}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement x="185" y="12" width="100" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[Maps.filterKeys($P{citiesMap}, Predicates.in($P{cities})).values()]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
    ... 
</jasperReport> 

結果は次のようになります:google guavaライブラリ

サンプルの助けを借りて enter image description here

+0

私はあなたのサンプルを試してみましたが、error.Actually、私はパラメータが入力名= "ID"と "都市"ではないが欲しいです。私はIDのリストを入れると、それはレポートのdesc都市を表示します。たとえばid 1 = 'Dalas'、2 = Paris、3 = Lycon。それを行う方法は? –

+0

私のサンプルでは、​​ 'ID'は' address'オブジェクトのPKであり、 'city'オブジェクトではありません。サンプルが動作しています - どのようなエラーがありますか?ところで、このサンプルでは、​​レポートの言語を「Java」に設定する必要があります。 –

+0

私は試しましたが、結果は私が望むものではありません。私が望むのは、id 1 = 'Dalas'、2 = Paris、3 = Lyconの場合です。 –