2016-05-09 8 views
0

Ich verwende Textfelder zur Anzeige von Spaltennamen. Für den entsprechenden Namen der Spalte zeigt habe ich die folgende Methode versucht:Wie kann der Ausdruck mit der JasperReports-API korrekt festgelegt werden?

Methode 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 + "}"); 

Aber auf das obige Verfahren verwendet es eine Ausnahme auslöst sagen:

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$ 

Aber bei Verwendung der unteren Zeilen wird die Spalte Names korrekt gesetzt.

Methode 2:

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

Meine Zweifel sind:
1. Für die Daten der ersten Methode erwähnte Anzeige verwendet wird. Wie kommt es dann, dass es keine Ausnahmen gibt?
2. Warum hat es diese Ausnahmen ausgelöst, wenn die gleiche Methode zum Anzeigen von Spaltennamen verwendet wurde?
3. Wie funktioniert die 2. Methode?

Antwort

0

1 .:

Ich nehme an, die Daten korrekt in Anführungszeichen eingeschlossen ist.

2 .:

von der Ausnahme Erklärung Beurteilen (z.B. Syntax error on token "ID", delete this token) der Interpreter sieht zwei Werte, und SHIFTID. Es scheint hier, dass Zitate fehlen, z.

"SHIFT ID" 
"BILL NO." 

3 .:

In Ihrem ersten Beispiel erstellen Sie ein JRDesignExpression, den Wert Klasse gesetzt und den Text gesetzt.

Das Feld ist nicht in Anführungszeichen eingeschlossen, wie in Ihrem unteren Beispiel zu sehen ist. Es sollte wie folgt aussehen:

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

Auch haben Sie nicht den Ausdruck Ihrer Textfield zuweisen:

textField.setExpression(expression)