2016-05-09 9 views
0

私は、列名を表示するためのテキストフィールドを使用しています。JasperReports APIで式を設定する正しい方法は何ですか?

方法1:

textField.setX(currentXPos); 
textField.setY(0); 
textField.setWidth(columnWidth); 
textField.setPrintWhenDetailOverflows(false); 
textField.setHeight(colDtlBandHeight); 
textField.setStretchWithOverflow(true); 
textField.setStretchType(StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT); 
textField.setStyle(normalFont); 
textField.setBlankWhenNull(true); 
JRDesignExpression expression = new JRDesignExpression(); 
expression.setValueClass(columnClass); 
expression.setText("$F{" + columnName + "}"); 

しかし、それは例外をスローし、上記の方法を使用して上のが言って:列の対応する名前を示すために私は次の方法を試してみました

net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 
1. Syntax error on token "ID", delete this token 
    value = SHIFT ID; //$JR_EXPR_ID=44$ 
2. Syntax error, insert ";" to complete BlockStatements 
    value = BILL NO.; //$JR_EXPR_ID=45$ 
3. Syntax error on token ".", invalid VariableDeclarator 
    value = BILL NO.; //$JR_EXPR_ID=45$ 
4. Syntax error on token "DATE", delete this token 
    value = BILL DATE; //$JR_EXPR_ID=46$ 

しかし、以下の行を使うと列名が正しく設定されます。

方法2:

textField.setExpression(new JRDesignExpression("new String(\""+colTitle+"\")")); 

私の疑問がある:前記第一の方法が使用されているデータを表示するため
1。それではどうして例外がないのでしょうか?
2.同じメソッドを列名の表示に使用した場合、なぜそれらの例外がスローされましたか?
3. 2番目の方法はどのように機能しましたか?

答えて

0

1 .:

私は、データが正しく引用符で囲まれているとします。例外説明から判断

2:

(例えばSyntax error on token "ID", delete this token)インタプリタは、2つの値、SHIFTIDを見ます。引用符が欠けているようです。あなたの最初の例で

"SHIFT ID" 
"BILL NO." 

3:

、あなたがJRDesignExpressionを作成し、値のクラスを設定して、テキストを設定します。

フィールドは、下の例のように引用符で囲まれていません。それは次のようになります。また

expression.setText("\"$F{" + columnName + "}\""); 

、あなたのテキストフィールドに式を割り当てませんでした:

textField.setExpression(expression) 
関連する問題